#!/usr/bin/python
# -*- coding: utf-8 -*-
#****************************************************************************
#*                                                                          *
#* by Zoltan Hubert                                                         *
#*                                                                          *
#*   code partially based on:                                               *
#*                                                                          *
#* Caliper tool, icons by easyw-fc                                          *
#* evolution of Macro_CenterFace                                            *
#* some part of Macro WorkFeature                                           *
#* and Macro Rotate To Point, Macro_Delta_xyz                               *
#* and assembly2                                                            *
#*                                                                          *
#* Measure tool                                                             *
#*                                                                          *
#*    This is a stand-alone tool that doesn't need anything outside Part    *
#*                                                                          *
#*    This program is free software; you can redistribute it and/or modify  *
#*    it under the terms of the GNU Library General Public License (LGPL)   *
#*    as published by the Free Software Foundation; either version 2 of     *
#*    the License, or (at your option) any later version.                   *
#*    for detail see the LICENCE text file.                                 *
#****************************************************************************




import threading, sys, math, os
import numpy as np
import base64

from PySide import QtGui, QtCore
from pivy import coin

import FreeCADGui as Gui
import FreeCAD as App
from FreeCAD import Base
from FreeCAD import Console as FCC
import Part

# only needed for icons
import Asm4_libs as Asm4
import selectionFilter




"""
    +-----------------------------------------------+
    |                Global variables               |
    +-----------------------------------------------+
"""
global taskUI, addedDims, PtS, Asm4_3DselObserver
addedDims = []
PtS = None


annoFontSize = 12.0
annoPrecision = 0.001
iconDir = Asm4.iconPath


# remove previous snap point
def removePtS():
    global PtS
    if PtS and hasattr(PtS,'Name') and App.ActiveDocument.getObject(PtS.Name):
        App.ActiveDocument.removeObject(PtS.Name)
        PtS = None


# usage:
# object = App.ActiveDocument.addObject('App::FeaturePython','objName')
# object.ViewObject.Proxy = setCustomIcon(object,'Icon.svg')
# import base64
# encoded = base64.b64encode(open("filename.png", "rb").read())
class setCustomIcon():
    def __init__( self, obj, iconFile ):
        icon = os.path.join( iconDir , iconFile )
        self.customIcon = icon

    def getIcon(self):
        return self.customIcon


"""
    +-----------------------------------------------+
    |         The menu and toolbar command          |
    +-----------------------------------------------+
"""
class MeasureCmd():
    def __init__(self):
        super(MeasureCmd,self).__init__()

    def GetResources(self):
        return {"MenuText": "Measure",
                "ToolTip": "Measure Tool",
                "Pixmap" : os.path.join( iconDir , 'Part_Measure.svg')
                }

    def IsActive(self):
        if App.ActiveDocument:
            return True
        return False

    def Activated(self):
        Gui.Control.showDialog( MeasureUI() )




"""
    +-----------------------------------------------+
    |    The UI and functions in the Task panel     |
    +-----------------------------------------------+
"""
class MeasureUI():

    def __init__(self):
        self.base = QtGui.QWidget()
        self.form = self.base
        iconFile = os.path.join( iconDir , 'Part_Measure.svg')
        self.form.setWindowIcon(QtGui.QIcon( iconFile ))
        self.form.setWindowTitle('Measure')

        # remove selectionFilter
        global Asm4_3DselObserver
        self.selectionFilterStatus = selectionFilter.observerStatus()
        selectionFilter.observerDisable()
        selectionFilter.uncheckAll()

        # draw the GUI, objects are defined later down
        self.drawUI()
        global taskUI
        taskUI = self
        global PtS
        global addedDims

        # start the observer
        Gui.Selection.clearSelection()
        #self.so=SelObserverCaliper()
        self.so = selectionObserver()
        Gui.Selection.addObserver( self.so, 1 ) # 1 = resolve
        FCC.PrintMessage('Observer started\n')

        # enable the measurement points
        self.Selection1.setEnabled(True)
        self.Selection1.setChecked(False)
        self.Selection2.setEnabled(False)
        self.sel1Icon.setIcon(QtGui.QIcon(self.selectIcon))
        # init finished


    # standard FreeCAD Task panel buttons
    def getStandardButtons(self):
        return QtGui.QDialogButtonBox.Cancel | QtGui.QDialogButtonBox.Reset | QtGui.QDialogButtonBox.Ok

    # OK button
    def accept(self):
        # update the Measure group to get rid if the small overlay icon
        App.ActiveDocument.recompute()
        self.Finish()

    # Cancel button
    def reject(self):
        self.Reset()
        self.Finish()

    # Reset button
    def clicked(self, button):
        if button == QtGui.QDialogButtonBox.Reset:
            self.Reset()

    # Close
    def Finish(self):
        FCC.PrintMessage("closing ... ")
        try:
            Gui.Selection.removeObserver(self.so)   # uninstall the resident SelObserver function
            FCC.PrintMessage("done\n")
        except:
            FCC.PrintWarning("was not able to remove observer\n")
        # remove PtS because it can have strange results
        removePtS()
        # close Task widget
        Gui.Control.closeDialog()

    # Reset (clear measures)
    def Reset(self):
        global PtS, addedDims
        Gui.Selection.clearSelection()
        self.clearConsole()
        FCC.PrintMessage('Removing all measurements ...')
        removePtS()
        for d in addedDims:
            FCC.PrintMessage('.')
            try:
                App.ActiveDocument.removeObject(d.Name)
            except:
                pass
        addedDims=[]
        # also remove the "Measures" group if any
        if App.ActiveDocument.getObject('Measures') and \
                    App.ActiveDocument.getObject('Measures').TypeId=='App::DocumentObjectGroup':
            App.ActiveDocument.removeObject('Measures')
        # clear UI
        self.sel1Name.clear()
        self.sel2Name.clear()
        self.sel1Icon.setIcon(QtGui.QIcon(self.selectIcon))
        self.sel2Icon.setIcon(QtGui.QIcon(self.noneIcon))
        self.Selection1.setEnabled(True)
        self.Selection1.setChecked(False)
        self.Selection2.setEnabled(False)
        self.resultText.clear()
        FCC.PrintMessage(' done\n')


    # clear report view and Python panel
    def clearConsole(self):
        #clearing previous messages
        mw = Gui.getMainWindow()
        #c=mw.findChild(QtGui.QPlainTextEdit, "Python console")
        #c.clear()
        rv = mw.findChild(QtGui.QTextEdit, "Report view")
        rv.clear()

    # Actions
    #
    # when changing the measurement type, reset pre-existing selection
    def onMeasure_toggled(self):
        global PtS
        self.Selection1.setChecked(False)
        self.Selection2.setEnabled(False)
        Gui.Selection.clearSelection()
        removePtS()
        self.sel1Icon.setIcon(QtGui.QIcon(self.selectIcon))
        self.sel2Icon.setIcon(QtGui.QIcon(self.noneIcon))
        # Angle dimensions only work with Snap selection
        if self.rbAngle.isChecked():
            self.rbShape.setChecked(True)

    # re-initialize Selection 1
    def onSel1_toggled(self):
        if not self.Selection1.isChecked() and self.Selection2.isEnabled():
            self.Selection1.setChecked(False)
            self.sel1Name.clear()
            self.Selection2.setEnabled(False)
            Gui.Selection.clearSelection()
            removePtS()
            self.sel1Icon.setIcon(QtGui.QIcon(self.selectIcon))
            self.sel2Icon.setIcon(QtGui.QIcon(self.noneIcon))
        else:
            if not self.Selection2.isEnabled():
                self.Selection1.setChecked(False)
                self.sel1Icon.setIcon(QtGui.QIcon(self.selectIcon))
                #self.sel2Icon.setIcon(QtGui.QIcon(self.noneIcon))

    # Angle can be measured only between shapes
    def onSnap_toggled(self):
        if self.rbAngle.isChecked() and self.rbSnap.isChecked():
            self.rbDistance.setChecked(True)


    # defines the UI, only static elements
    def drawUI(self):
        iconSize = 32
        btSize = 48
        btn_sizeX=32;btn_sizeY=32;
        btn_sizeX=32;btn_sizeY=32;
        chkb_sizeX=20;chkb_sizeY=20;
        btn_sm_sizeX=20;btn_sm_sizeY=20;
        btn_md_sizeX=26;btn_md_sizeY=26;

        # icons of UI
        pm = QtGui.QPixmap()
        self.noneIcon      = None
        pm.loadFromData(base64.b64decode(    valid_b64         ))
        self.validIcon     = QtGui.QIcon(pm)
        pm.loadFromData(base64.b64decode(    select_b64        ))
        self.selectIcon    = QtGui.QIcon(pm)
        # icons for the tree
        self.pointIcon     = 'Draft_Point.svg'
        self.lineIcon      = 'Draft_Line.svg'
        self.circleIcon    = 'Draft_Circle.svg'
        self.dimensionIcon = 'Draft_Dimension.svg'

        # the layout for the main window is vertical (top to down)
        self.mainLayout = QtGui.QVBoxLayout(self.form)
        self.mainLayout.addWidget(QtGui.QLabel('Controls'))

        # measurement type
        self.measureGroup = QtGui.QFrame(self.form)
        self.measureGroup.setFrameStyle(QtGui.QFrame.StyledPanel | QtGui.QFrame.Plain)
        self.mainLayout.addWidget(self.measureGroup)
        self.measureGrid = QtGui.QGridLayout(self.measureGroup)
        # self.mainLayout.addLayout(self.measureGrid)

        # 0,0
        pm.loadFromData(base64.b64decode(Dim_Radius_b64))
        self.rbRadius = QtGui.QRadioButton(self.measureGroup)
        self.rbRadius.setObjectName("rbRadius")
        self.rbRadius.setToolTip("Measure Radius of Arc or Circle\nMeasure Length of Edge")
        self.rbRadius.setIconSize(QtCore.QSize(btn_md_sizeX,btn_md_sizeY))
        self.rbRadius.setIcon(QtGui.QIcon(pm))
        self.rbRadius.setChecked(True)
        self.measureGrid.addWidget(self.rbRadius, 0, 0 )
        # 0,1
        pm.loadFromData(base64.b64decode(Dim_Length_b64))
        self.rbDistance = QtGui.QRadioButton(self.measureGroup)
        self.rbDistance.setObjectName("rbDistance")
        self.rbDistance.setToolTip("Measure Distance")
        self.rbDistance.setIconSize(QtCore.QSize(btn_md_sizeX,btn_md_sizeY))
        self.rbDistance.setIcon(QtGui.QIcon(pm))
        self.measureGrid.addWidget(self.rbDistance, 0, 1 )
        # 0,2
        pm.loadFromData(base64.b64decode(Dim_Angle_b64))
        self.rbAngle = QtGui.QRadioButton(self.measureGroup)
        self.rbAngle.setObjectName("rbAngle")
        self.rbAngle.setToolTip("Measure Angle")
        self.rbAngle.setIconSize(QtCore.QSize(btn_md_sizeX,btn_md_sizeY))
        self.rbAngle.setIcon(QtGui.QIcon(pm))
        self.measureGrid.addWidget(self.rbAngle, 0, 2 )

        # actual measurement tools
        self.snapGroup = QtGui.QFrame(self.form)
        self.snapGroup.setFrameStyle(QtGui.QFrame.StyledPanel | QtGui.QFrame.Plain)
        # self.snapGroup.setTitle("Selection method")
        self.mainLayout.addWidget(self.snapGroup)
        self.snapGrid = QtGui.QGridLayout(self.snapGroup)
        # self.mainLayout.addLayout(self.snapGrid)

        # original snap/selection tools
        # 0,0
        pm.loadFromData(base64.b64decode(Snap_Options_b64))
        self.rbSnap = QtGui.QRadioButton(self.snapGroup)
        self.rbSnap.setObjectName("rbSnap")
        self.rbSnap.setToolTip("Snap to EndPoint, MiddlePoint, Center")
        self.rbSnap.setIconSize(QtCore.QSize(3*btn_md_sizeX,btn_md_sizeY))
        self.rbSnap.setIcon(QtGui.QIcon(pm))
        self.rbSnap.setChecked(False)
        self.snapGrid.addWidget(self.rbSnap, 0, 0, 1, 2 )

        # 0,2
        pm.loadFromData(base64.b64decode(Center_Mass_b64))
        self.rbShape = QtGui.QRadioButton(self.snapGroup)
        self.rbShape.setObjectName("rbShape")
        self.rbShape.setToolTip("Select Shape")
        self.rbShape.setIconSize(QtCore.QSize(btn_md_sizeX,btn_md_sizeY))
        self.rbShape.setIcon(QtGui.QIcon(pm))
        self.rbShape.setChecked(True)
        self.snapGrid.addWidget(self.rbShape, 0, 2 )

        '''
        # TODO : make this selectionFilter be applied
        # new snap/select tools
        self.selGroup = QtGui.QFrame(self.form)
        self.selGroup.setFrameStyle(QtGui.QFrame.StyledPanel | QtGui.QFrame.Plain)
        self.mainLayout.addWidget(self.selGroup)
        self.selGrid = QtGui.QGridLayout(self.selGroup)
        # 0,0 SnapCenter
        pm.loadFromData(base64.b64decode(SnapCenter_b64))
        self.selCenter = QtGui.QPushButton(self.selGroup)
        self.selCenter.setObjectName("selCenter")
        self.selCenter.setToolTip("Select Circle Center")
        self.selCenter.setIconSize(QtCore.QSize(btn_md_sizeX,btn_md_sizeY))
        self.selCenter.setIcon(QtGui.QIcon(pm))
        self.selCenter.setCheckable(True)
        self.selCenter.setChecked(False)
        self.selCenter.setFlat(True)
        self.selGrid.addWidget(self.selCenter, 0, 0 )
        # 0,1 SnapVertex
        pm.loadFromData(base64.b64decode(SnapVertex_b64))
        self.selVertex = QtGui.QPushButton(self.selGroup)
        self.selVertex.setObjectName("selVertex")
        self.selVertex.setToolTip("Select Vertex")
        self.selVertex.setIconSize(QtCore.QSize(btn_md_sizeX,btn_md_sizeY))
        self.selVertex.setIcon(QtGui.QIcon(pm))
        self.selVertex.setCheckable(True)
        self.selVertex.setChecked(False)
        self.selVertex.setFlat(True)
        self.selGrid.addWidget(self.selVertex, 0, 1 )
        # 0,2 SnapEdge
        pm.loadFromData(base64.b64decode(SnapEdge_b64))
        self.selEdge = QtGui.QPushButton(self.selGroup)
        self.selEdge.setObjectName("selEdge")
        self.selEdge.setToolTip("Select Edge")
        self.selEdge.setIconSize(QtCore.QSize(btn_md_sizeX,btn_md_sizeY))
        self.selEdge.setIcon(QtGui.QIcon(pm))
        self.selEdge.setCheckable(True)
        self.selEdge.setChecked(False)
        self.selEdge.setFlat(True)
        self.selGrid.addWidget(self.selEdge, 0, 2 )
        # 0,3 SnapFace
        pm.loadFromData(base64.b64decode(SnapFace_b64))
        self.selFace = QtGui.QPushButton(self.selGroup)
        self.selFace.setObjectName("selFace")
        self.selFace.setToolTip("Select Face")
        self.selFace.setIconSize(QtCore.QSize(btn_md_sizeX,btn_md_sizeY))
        self.selFace.setIcon(QtGui.QIcon(pm))
        self.selFace.setCheckable(True)
        self.selFace.setChecked(False)
        self.selFace.setFlat(True)
        self.selGrid.addWidget(self.selFace, 0, 3 )
        # 0,4 SnapAll
        pm.loadFromData(base64.b64decode(SelectAll_b64))
        self.selShape = QtGui.QPushButton(self.selGroup)
        self.selShape.setObjectName("selShape")
        self.selShape.setToolTip("Select any Shape")
        self.selShape.setIconSize(QtCore.QSize(btn_md_sizeX,btn_md_sizeY))
        self.selShape.setIcon(QtGui.QIcon(pm))
        self.selShape.setCheckable(True)
        self.selShape.setChecked(True)
        self.selShape.setFlat(True)
        self.selGrid.addWidget(self.selShape, 0, 4 )
        # exclusive buttons
        self.buttonGroup = QtGui.QButtonGroup(self.selGroup)
        self.buttonGroup.setExclusive(True)
        self.buttonGroup.addButton(self.selCenter)
        self.buttonGroup.addButton(self.selVertex)
        self.buttonGroup.addButton(self.selEdge)
        self.buttonGroup.addButton(self.selFace)
        self.buttonGroup.addButton(self.selShape)
        '''
        
        # select elements
        self.selectGrid = QtGui.QGridLayout()
        # first element
        self.Selection1 = QtGui.QPushButton('Selection 1')
        self.Selection1.setToolTip("Select First Element")
        self.Selection1.setMaximumWidth(150)
        self.Selection1.setCheckable(True)
        self.Selection1.setChecked(False)
        self.sel1Name  = QtGui.QLineEdit()
        self.sel1Name.setMinimumWidth (50)
        self.sel1Name.setReadOnly(True)
        self.sel1Icon = QtGui.QPushButton()
        self.sel1Icon.setFlat(True)
        self.sel1Icon.setMinimumSize(QtCore.QSize(iconSize, iconSize))
        self.sel1Icon.setMaximumSize(QtCore.QSize(iconSize, iconSize))
        self.sel1Icon.setIconSize(QtCore.QSize(iconSize,iconSize))
        self.sel1Icon.setIcon(QtGui.QIcon(self.noneIcon))
        self.selectGrid.addWidget(self.Selection1, 0,0)
        self.selectGrid.addWidget(self.sel1Name,   0,1)
        self.selectGrid.addWidget(self.sel1Icon,   0,2)

        # second element
        self.Selection2 = QtGui.QPushButton('Selection 2')
        self.Selection2.setToolTip("Select Second Element")
        self.Selection2.setMaximumWidth(150)
        self.Selection2.setEnabled(False)
        self.Selection2.setChecked(False)
        self.sel2Name  = QtGui.QLineEdit()
        self.sel2Name.setMinimumWidth (50)
        self.sel2Name.setReadOnly(True)
        self.sel2Icon = QtGui.QPushButton()
        self.sel2Icon.setFlat(True)
        self.sel2Icon.setMinimumSize(QtCore.QSize(iconSize, iconSize))
        self.sel2Icon.setMaximumSize(QtCore.QSize(iconSize, iconSize))
        self.sel2Icon.setIconSize(QtCore.QSize(iconSize,iconSize))
        self.sel2Icon.setIcon(QtGui.QIcon(self.noneIcon))
        self.selectGrid.addWidget(self.Selection2, 1,0)
        self.selectGrid.addWidget(self.sel2Name,   1,1)
        self.selectGrid.addWidget(self.sel2Icon,   1,2)

        self.mainLayout.addLayout(self.selectGrid)

        # Results
        # draw annotation in the GUI window
        self.bLabel = QtGui.QCheckBox()
        self.bLabel.setObjectName("bLabel")
        self.bLabel.setToolTip("Enable extra Label")
        self.bLabel.setText("Show Label in 3D view")
        self.bLabel.setChecked(True)
        self.mainLayout.addWidget(self.bLabel)

        # draw X-Y-Z components
        self.Components = QtGui.QCheckBox()
        self.Components.setObjectName("Components")
        self.Components.setToolTip("Show all dimension components")
        self.Components.setText("Show Components")
        self.Components.setChecked(False)
        self.mainLayout.addWidget(self.Components)

        # Results
        self.mainLayout.addWidget(QtGui.QLabel('Results'))
        self.resultText = QtGui.QTextEdit()
        self.resultText.setMinimumSize(200, 200)
        self.resultText.setReadOnly(True)
        self.mainLayout.addWidget(self.resultText)

        # Actions
        self.rbRadius.toggled.connect(self.onMeasure_toggled)
        self.rbDistance.toggled.connect(self.onMeasure_toggled)
        self.rbAngle.toggled.connect(self.onMeasure_toggled)
        #self.rbAngle.toggled.connect(self.onAngle_toggled)
        self.rbSnap.toggled.connect(self.onSnap_toggled)
        self.Selection1.toggled.connect(self.onSel1_toggled)



"""
    +-----------------------------------------------+
    |    a selection observer resident function     |
    +-----------------------------------------------+
"""
class selectionObserver():
    def __init__(self):
        global PtS
        self.Sel1 = None
        self.Shp1 = None
        self.Pt1  = None
        self.Sel2 = None
        self.Shp2 = None
        self.Pt2  = None
        PtS       = None

    def render_distance(self, distance: float) -> str:
        return App.Units.schemaTranslate(
            App.Units.Quantity(str(distance) + " mm"),
            App.Units.getSchema(),
        )[0]

    # add the dim to the global addedDims table to be able to remove it
    # add it also the "Measures" group
    def addToDims( self, dim ):
        global addedDims
        # check whether there is a "Measures" group
        if not App.ActiveDocument.getObject('Measures'):
            # if no, create one
            measuresGroup = App.ActiveDocument.addObject( 'App::DocumentObjectGroup', 'Measures' )
        # if there is already one, use it
        elif App.ActiveDocument.getObject('Measures').TypeId=='App::DocumentObjectGroup':
            measuresGroup = App.ActiveDocument.getObject('Measures')
        # there is already a "Measures" object but it's not a Group, don't use it
        else:
            measuresGroup = None
        if measuresGroup:
            measuresGroup.addObject(dim)
        # finally, add the dim to the global addedDims table/list
        addedDims.append(dim)

    # the real function
    def addSelection(self, document, obj, element, position):
        global taskUI
        global PtS

        fntsize='0.25mm'
        ticksize='0.1mm'

        # Select a subObject w/ the full hierarchy information
        # empty string means current document, '*' means all document.
        # The second argument 1 means resolve sub-object, which is the default value. 0 means full hierarchy.
        # sel = Gui.Selection.getSelectionEx('', 0)[0].SubObjects[0]
        selEx = Gui.Selection.getSelectionEx('', 0)
        if len(Gui.Selection.getSelection()) == 1 or len(selEx) == 1:# or (len(selobject) == 1 and len(sel) == 1):
            selObj = Gui.Selection.getSelection()[0]
            #Faces or Edges
            if len(selEx[0].SubObjects)>0:
                subShape = selEx[0].SubObjects[0]
                # we have selected an LCS, this needs special treatment
                if selObj.TypeId == 'PartDesign::CoordinateSystem':
                    globalPlacement = App.Placement()
                    '''
                    # get the selection hierarchy
                    ( obj, tree ) = Asm4.getSelectionTree()
                    # double-check, should always be true
                    if selObj == obj:
                        # first object is always in the current document
                        doc = App.ActiveDocument
                        # we parse the tree and cumulate the Placements
                        for objName in tree:
                            obj = doc.getObject(objName)
                            # Groups don't have Placement properties, ignore
                            if hasattr(obj,'Placement'):
                                globalPlacement *= obj.Placement
                            # if *this* object is a link to an *external* document, switch to that document
                            # necessary because links can be in the *current* document also
                            if obj.isDerivedFrom('App::Link') and obj.LinkedObject.Document != App.ActiveDocument:
                                doc = obj.LinkedObject.Document
                            # else, keep the same document
                            else:
                                pass
                    '''
                    # from https://forum.freecad.org/viewtopic.php?p=569083#p569083
                    # retType=3 returns the placement. Check the doc string for more info
                    # simplyfied version for single selection
                    path = selEx[0].SubElementNames[0]
                    globalPlacement = selEx[0].Object.getSubObject(path, retType=3) 
                    # create a point at the origin of the LCS
                    base = globalPlacement.Base
                    PtS  = self.drawPoint( App.Vector(base.x,base.y,base.z) )
                    subShape = PtS.Shape
                # if valid selection
                if subShape.isValid() and ('Face' in str(subShape) or 'Edge' in str(subShape) or 'Vertex' in str(subShape)):
                    # clear the result area
                    taskUI.resultText.clear()
                    removePtS()

                    # first element selection
                    if not taskUI.Selection1.isChecked():
                        # figure out the first selected element
                        self.Sel1 = None
                        self.Shp1 = None
                        self.Pt1  = None
                        self.Sel2 = None
                        self.Shp2 = None
                        self.Pt2  = None
                        #taskUI.sel1Name.setText(str(subShape))
                        taskUI.sel1Name.setText(str(subShape).split(' ')[0][1:])
                        taskUI.sel2Name.clear()                        # shape selected
                        if taskUI.rbShape.isChecked():
                            # the shape is actually a vertex, thus a point
                            if 'Vertex' in str(subShape):
                                self.Pt1 = subShape.Vertexes[0].Point
                                PtS  = self.drawPoint(self.Pt1)
                                self.Sel1 = 'point'
                            # all other (real) shapes
                            else:
                                self.Shp1 = subShape
                                self.Sel1 = 'shape'
                        # Snap to select a point
                        elif taskUI.rbSnap.isChecked():
                            self.Pt1 = self.getSnap(subShape)
                            if self.Pt1:
                                PtS  = self.drawPoint(self.Pt1)
                                self.Sel1 = 'point'
                        # this measures single objects
                        if taskUI.rbRadius.isChecked():
                            # if we have snapped a point before, we show its coordinates
                            if self.Sel1 == 'point':
                                self.measureCoords(self.Pt1)
                            # if we have selected a shape before, we show its characteristics
                            elif self.Sel1 == 'shape':
                                # a surface
                                if 'Face' in str(self.Shp1):
                                    self.measureArea(self.Shp1)
                                # a point (should have been caught before)
                                elif 'Vertex' in str(self.Shp1):
                                    self.measureCoords( self.Shp1 )
                                # a circle or arc of circle
                                # elif hasattr(self.Shp1,'Curve') and hasattr(self.Shp1.Curve,'Radius'):
                                elif self.isCircle(self.Shp1):
                                    taskUI.sel1Name.setText('Circle')
                                    self.measureCircle( self.Shp1 )
                                # a straight line segment
                                #elif hasattr(self.Shp1,'Curve') and self.Shp1.Curve.TypeId=='Part::GeomLine':
                                elif self.isSegment(self.Shp1):
                                    taskUI.sel1Name.setText('Segment')
                                    self.measureLine( self.Shp1 )
                                # dunno what that stuff is
                                else:
                                    self.printResult("Can't measure\n"+str(self.Shp1))
                            # dunno what that stuff is
                            else:
                                self.printResult("Can't measure\n"+str(subShape))
                            # unset first selection
                            self.Sel1 is None
                        # if not rbRadius, launch the selection of the second element
                        elif self.Sel1 is not None:
                            #taskUI.Selection1.setEnabled(False)
                            taskUI.Selection2.setEnabled(True)
                            taskUI.Selection1.setChecked(True)
                            taskUI.sel1Icon.setIcon(QtGui.QIcon(taskUI.validIcon))
                            taskUI.sel2Icon.setIcon(QtGui.QIcon(taskUI.selectIcon))

                    # second element selected
                    elif taskUI.Selection2.isEnabled(): #step #2
                        #if PtS and ha#sattr(PtS,'Name') and App.ActiveDocument.getObject(PtS.Name):
                        #    App.ActiveDocument.removeObject(PtS.Name)
                        #    PtS = None
                        # figure out the second selected element
                        taskUI.sel2Name.setText(str(subShape).split(' ')[0][1:])
                        if taskUI.rbShape.isChecked():
                            self.Sel2 = 'shape'
                            self.Shp2 = subShape
                        # Snap to select a point
                        elif taskUI.rbSnap.isChecked():
                            self.Pt2 = self.getSnap(subShape)
                            if self.Pt2:
                                self.Sel2 = 'point'
                        # if we have a valid selection:
                        if self.Sel2 is not None:
                            taskUI.Selection2.setEnabled(False)
                            taskUI.Selection1.setChecked(False)
                            taskUI.sel1Icon.setIcon(QtGui.QIcon(taskUI.selectIcon))
                            taskUI.sel2Icon.setIcon(QtGui.QIcon(taskUI.validIcon))
                            removePtS()
                            # Measure distance
                            if taskUI.rbDistance.isChecked():
                                # make a vertex shape out of a point
                                if self.Pt1 and self.Sel1=='point':
                                    self.Shp1 = Part.Vertex(Part.Point( self.Pt1 ))
                                    self.Sel1 = 'shape'
                                if self.Pt2 and self.Sel2=='point':
                                    self.Shp2 = Part.Vertex(Part.Point( self.Pt2 ))
                                    self.Sel2 = 'shape'
                                if self.Sel1=='shape' and self.Sel2=='shape':
                                    self.distShapes(self.Shp1,self.Shp2)
                                # unexpected behaviour
                                else:
                                    self.printResult( 'ERROR 42\n'+str(self.Shp1)+'\n'+str(self.Shp2) )
                            # Measure angle
                            elif taskUI.rbAngle.isChecked():
                                if self.Sel1=='shape' and self.Sel2=='shape':
                                    self.angleShapes( self.Shp1, self.Shp2 )
                                else:
                                    self.printResult( 'Select only faces or lines' )
                        # some problem
                        else:
                            self.printResult( 'ERROR 44\n'+str(self.Shp2) )
                # not valid selection
                else:
                    self.printResult('ERROR 40\n'+str(subShape))


    # uses BRepExtrema_DistShapeShape to calculate the distance between 2 shapes
    def angleShapes( self, shape1, shape2 ):
        global taskUI
        if shape1.isValid() and shape2.isValid():
            Gui.Selection.clearSelection()
            self.printResult( 'Measuring angles' )
            # Datum object
            if shape1.BoundBox.DiagonalLength > 1e+10:
                pt1 = shape1.Placement.Base
            else:
                pt1 = shape1.BoundBox.Center
            # Datum object
            if shape2.BoundBox.DiagonalLength > 1e+10:
                pt2 = shape2.Placement.Base
            else:
                pt2 = shape2.BoundBox.Center
            # get the direction of the shape
            dir1 = self.getDir(shape1)
            dir2 = self.getDir(shape2)
            if dir1 and dir2:
                distance = -1
                angle = dir1.getAngle(dir2)*180./math.pi
                # 2 flat faces
                if self.isFlatFace(shape1) and self.isFlatFace(shape2):
                    angle = 180 - angle
                else:
                    # 1 flat face and 1 direction
                    if self.isFlatFace(shape1) or self.isFlatFace(shape2):
                        angle = 90 - angle
                    if angle > 90:
                        angle = 180. - angle
                # parallel directions
                if abs(angle) < 1.0e-6 or abs(180-angle)<1.0e-6:
                    v1 = Part.Vertex(Part.Point( pt1 ))
                    v2 = Part.Vertex(Part.Point( pt2 ))
                    distance = v1.distToShape(v2)[0]
                self.printAngle( angle, distance )
                try:
                    self.drawLine(pt1,pt2,'Angle')
                    self.annoAngle( self.midPoint(pt1,pt2), angle, distance )
                except:
                    pass
            else:
                self.printResult('Ivalid directions')
        else:
            self.printResult('Ivalid shapes')

    # uses BRepExtrema_DistShapeShape to calculate the distance between 2 shapes
    def distShapes( self, shape1, shape2 ):
        global taskUI
        if shape1.isValid() and shape2.isValid():
            Gui.Selection.clearSelection()
            measure = shape1.distToShape(shape2)
            if measure and self.isVector(measure[1][0][0]) and self.isVector(measure[1][0][1]):
                dist = measure[0]
                self.printResult('Minimum Distance :\n  '+str(dist))
                if dist > 1.0e-9:
                    pt1   = measure[1][0][0]
                    pt2   = measure[1][0][1]
                    self.measurePoints(pt1,pt2)
        else:
            self.printResult('Ivalid shapes')

    # measure a straight line
    def measureLine(self, line ):
        global taskUI
        if self.isSegment(line):
            pt1 = line.Vertexes[0].Point
            pt2 = line.Vertexes[1].Point
            Gui.Selection.clearSelection()
            self.drawLine(pt1,pt2,'Length')
            dx = pt1[0]-pt2[0]
            dy = pt1[1]-pt2[1]
            dz = pt1[2]-pt2[2]
            length = line.Length
            text = 'Length = '+self.render_distance(length)+'\n'
            text += "ΔX = "+self.render_distance(dx)+"\n"
            text += 'ΔY = '+self.render_distance(dy)+'\n'
            text += 'ΔZ = '+self.render_distance(dz)
            # self.printResult( 'Measuring length of\n'+str(line) )
            self.printResult( text )
            if taskUI.bLabel.isChecked():
                mid = line.BoundBox.Center
                if taskUI.Components.isChecked():
                    anno = ['L  = '+self.arrondi(length),'ΔX = '+self.arrondi(dx), \
                            'ΔY = '+self.arrondi(dy),    'ΔZ = '+self.arrondi(dz) ]
                else:
                    anno = ['L = '+self.render_distance(length)]
                self.drawAnnotation( mid, anno )
        else:
            self.printResult( 'Not a valid Line\n'+str(line) )

    # measure distance between 2 points
    def measurePoints(self, pt1, pt2 ):
        global taskUI
        mid = self.midPoint(pt1,pt2)
        if mid:
            Gui.Selection.clearSelection()
            self.drawLine(pt1,pt2,'DistPoints')
            dx = pt1[0]-pt2[0]
            dy = pt1[1]-pt2[1]
            dz = pt1[2]-pt2[2]
            dist = math.sqrt(dx*dx + dy*dy + dz*dz)
            text = 'Distance = '+self.render_distance(dist)+'\n'
            text += "ΔX : "+self.render_distance(dx)+"\n"
            text += 'ΔY : '+self.render_distance(dy)+'\n'
            text += 'ΔZ : '+self.render_distance(dz)
            # self.printResult( 'Measuring length of\n'+str(line) )
            self.printResult( text )
            if taskUI.bLabel.isChecked():
                if taskUI.Components.isChecked():
                    anno = ['D  = '+self.render_distance(dist), 'ΔX = '+self.arrondi(dx),
                            'ΔY = '+self.arrondi(dy),  'ΔZ = '+self.arrondi(dz) ]
                else:
                    anno = ['D = '+self.render_distance(dist)]
                self.drawAnnotation( mid, anno )
        else:
            self.printResult( 'Not valid Points' )

    # measure radius of a circle
    def measureCircle(self, circle):
        global taskUI, PtS
        if self.isCircle(circle):
            radius = circle.Curve.Radius
            center = circle.Curve.Center
            axis   = circle.Curve.Axis
            Gui.Selection.clearSelection()
            self.drawCircle( radius, center, axis )
            text = 'Radius : '+self.render_distance(radius)+"\n"
            # if annotation is checked, show label with R = radius
            text += "Diameter : "+self.render_distance(radius*2)+"\n"
            text += 'Center : \n'
            text += '  ( '+self.arrondi(center.x)+", "+self.arrondi(center.y)+", "+self.arrondi(center.z)+" )\n"
            text += 'Axis : \n'
            text += "  ( "+self.arrondi(axis.x)+", "+self.arrondi(axis.y)+", "+self.arrondi(axis.z)+" )"
            self.printResult(text)
            if taskUI.bLabel.isChecked():
                pt = circle.Vertexes[0].Point
                self.drawLine(center,pt,'Radius')
                self.drawAnnotation(pt, ['R = '+self.render_distance(radius)])
            else:
                PtS = self.drawPoint(center)
        else:
            self.printResult('Not a valid circle\n'+str(circle))


    # figure out the direction of a shape, be it a line, a surface or a circle
    def getDir( self, shape ):
        direction = None
        # for a segment, it's the normalized vector along the segment
        if self.isSegment(shape):
            line = shape
            pt1 = line.Vertexes[0].Point
            pt2 = line.Vertexes[1].Point
            vect = (pt2.sub(pt1))
            if vect.Length != 0:
                direction = vect / vect.Length
        # for another line (like Datum::Line) it's the Z vector
        # multiplied by the Line's Placement
        elif self.isLine(shape):
            direction = shape.Placement.Rotation.multVec(App.Vector(0,0,1))
        # for a Circle it's the circle's axis
        elif self.isCircle(shape):
            direction = shape.Curve.Axis
            # TODO: drawAxis(circle)
        # for a flt face it's the normal
        elif self.isFlatFace(shape):
            direction = shape.normalAt(0,0)
            # TODO: drawNormal(face)
        return direction

    # figure out snap point of shape
    def getSnap( self, shape ):
        point = None
        if shape.isValid():
            if 'Vertex' in str(shape):
                point  = shape.Vertexes[0].Point
            # for a circle, snap to the center
            elif 'Edge' in str(shape) and hasattr(shape,'Curve') \
                                      and hasattr(shape.Curve,'Radius'):
                point = shape.Curve.Center
            # as fall-back, snap to center of bounding box
            elif hasattr(shape,'BoundBox'):
                point = shape.BoundBox.Center
        else:
            self.printResult('Invalid shape\n'+str(shape))
        return point

    # measure the coordinates of a single point
    def measureCoords(self, vertex ):
        global taskUI
        point = None
        if self.isVector(vertex):
            point = vertex
        elif hasattr(vertex,'isValid')  and vertex.isValid() \
                                        and hasattr(vertex,'Vertexes') \
                                        and len(vertex.Vertexes) > 0:
            point = vertex.Vertexes[0].Point
        else:
            self.printResult('Not a valid point\n'+str(vertex))
        if point:
            #self.printResult( 'Measuring coordinates of\n'+str(vertex) )
            anno = ['Coordinates :', 'X : '+self.arrondi(point.x), 'Y : '+self.arrondi(point.y), 'Z : '+self.arrondi(point.z)]
            text =  'Coordinates :\n'
            text += "X : "+str(point.x)+"\n"
            text += 'Y : '+str(point.y)+'\n'
            text += 'Z : '+str(point.z)
            self.printResult(text)
            if taskUI.bLabel.isChecked():
                self.drawAnnotation( point, anno )


    def measureArea(self, face ):
        if face.isValid() and hasattr(face,'Area'):
            if self.isFlatFace(face):
                self.printResult('Flat face\nArea : '+str(face.Area)+'\n')
            else:
                self.printResult('Area : '+str(face.Area)+"\n")
        else:
            self.printResult('Not a valid surface\n'+str(face) )


    def printDims(self, ds, dx, dy, dz, dimType='Distance'):
        text = dimType+' : '+str(ds)
        text += "\nΔX = "+str(dx)+"\nΔY = "+str(dy)+"\nΔZ = "+str(dz)
        self.printResult(text)

    def printAngle(self, angle, distance=-1 ):
        global taskUI
        taskUI.resultText.clear()
        text = 'Angle : '+str(angle)+'°\n'
        if distance != -1:
            text += 'Distance // '+str(distance)
        taskUI.resultText.setPlainText(text)

    # print the result in the text field of the UI
    def printResult(self,text):
        global taskUI
        taskUI.resultText.clear()
        taskUI.resultText.setPlainText(text)

    def drawAnnotation(self, pos, textTable ):
        anno = App.ActiveDocument.addObject("App::AnnotationLabel","MeasureLbl")
        anno.BasePosition = pos
        # textTable is a table if strings: [ 'toto', 'titi', 'tata' ]
        anno.LabelText = textTable
        annoG = Gui.ActiveDocument.getObject(anno.Name)
        annoG.FontSize = annoFontSize
        self.addToDims(anno)

    def drawCircle( self, radius, center, axis ):
        global taskUI
        cc = Part.makeCircle( radius, center, axis )
        circle = App.ActiveDocument.addObject('Part::FeaturePython', 'aCircle')
        #circle.ViewObject.Proxy = setCustomIcon(circle,'Draft_Circle.svg')
        circle.ViewObject.Proxy = setCustomIcon( circle, taskUI.circleIcon )
        circle.Shape = Part.Wire( cc )
        circle.ViewObject.LineWidth = 5
        circle.ViewObject.LineColor = ( 1.0, 1.0, 1.0 )
        circle.ViewObject.PointSize = 10
        circle.ViewObject.PointColor= ( 0.0, 0.0, 1.0 )
        self.addToDims(circle)

    def drawDim( self, pt1, pt2, name='aDim', width=2 ):
        global taskUI
        if pt1!=pt2:
            # unit direction vector
            vDir = App.Vector(pt2.sub(pt1))
            uV   = vDir.multiply(1/vDir.Length)
            #setup the contour
            color = coin.SoBaseColor()
            color.rgb = (1, 1, 1)
            points=coin.SoCoordinate3()
            lines=coin.SoLineSet()
            points.point.values = ( (0,0,0),(10,10,10),(10,10,0) )

            #feed data to separator
            sep=coin.SoSeparator()
            sep.addChild(points)
            sep.addChild(color)
            sep.addChild(lines)

            #add separator to sceneGraph
            sg = FreeCADGui.ActiveDocument.ActiveView.getSceneGraph()
            sg.addChild(sep)


    def drawLine( self, pt1, pt2, name='aLine', width=5 ):
        global taskUI
        if pt1!=pt2:
            line = Part.makeLine( pt1, pt2 )
            wire = App.ActiveDocument.addObject('Part::FeaturePython', name)
            wire.ViewObject.Proxy = setCustomIcon(wire, taskUI.lineIcon )
            wire.Shape = Part.Wire(line)
            wire.ViewObject.LineWidth = width
            wire.ViewObject.LineColor = ( 1.0, 1.0, 1.0 )
            wire.ViewObject.PointSize = 10
            wire.ViewObject.PointColor= ( 0.0, 0.0, 1.0 )
            self.addToDims(wire)
        else:
            point = App.ActiveDocument.addObject('Part::FeaturePython', 'aPoint')
            point.ViewObject.Proxy = setCustomIcon(point, taskUI.pointIcon )
            point.Shape = Part.Vertex(Part.Point( pt1 ))
            point.ViewObject.PointSize = 10
            point.ViewObject.PointColor= ( 0.0, 0.0, 1.0 )
            self.addToDims(point)

    def drawPoint( self, pt ):
        global taskUI
        point = App.ActiveDocument.addObject('Part::FeaturePython', 'PtS')
        point.ViewObject.Proxy = setCustomIcon(point, taskUI.pointIcon )
        point.Shape = Part.Vertex(Part.Point( pt ))
        point.ViewObject.PointSize = 10
        point.ViewObject.PointColor= ( 1.000, 0.667, 0.000 )
        self.addToDims(point)
        return point

    def annoAngle(self, pos, angle, distance=-1 ):
        global taskUI
        anno = App.ActiveDocument.addObject("App::AnnotationLabel","AngleLbl")
        anno.BasePosition = pos
        if distance == -1 or taskUI.Components.isChecked()==False :
            anno.LabelText = [self.arrondi(angle)+'°']
        else:
            anno.LabelText = ['Angle: '+self.arrondi(angle)+'°', 'Distance // '+self.arrondi(distance)]
        annoG = Gui.ActiveDocument.getObject(anno.Name)
        annoG.FontSize = annoFontSize
        self.addToDims(anno)

    # round to precision anno_precision
    def arrondi( self, val ):
        approxval = int(val/annoPrecision + annoPrecision*0.1)*annoPrecision
        string = '{0:.3f}'.format(approxval)
        return string

    def midPoint(self, pt1, pt2):
        if self.isVector(pt1) and self.isVector(pt2):
            return App.Vector.add(pt1,(pt2.sub(pt1)).multiply(.5))
        return None

    def isVector( self, vect ):
        if isinstance(vect,App.Vector):
            return True
        return False

    def isCircle(self, shape):
        if shape.isValid()  and hasattr(shape,'Curve') \
                            and shape.Curve.TypeId=='Part::GeomCircle' \
                            and hasattr(shape.Curve,'Center') \
                            and hasattr(shape.Curve,'Radius'):
            return True
        return False

    def isLine(self, shape):
        if shape.isValid()  and hasattr(shape,'Curve') \
                            and shape.Curve.TypeId=='Part::GeomLine' \
                            and hasattr(shape,'Placement'):
            return True
        return False

    def isSegment(self, shape):
        if shape.isValid()  and hasattr(shape,'Curve') \
                            and shape.Curve.TypeId=='Part::GeomLine' \
                            and hasattr(shape,'Length') \
                            and hasattr(shape,'Vertexes') \
                            and len(shape.Vertexes)==2:
            return True
        return False

    def isFlatFace(self, shape):
        if shape.isValid()  and hasattr(shape,'Area')   \
                            and shape.Area > 1.0e-6     \
                            and hasattr(shape,'Volume') \
                            and shape.Volume < 1.0e-9:
            return True
        return False




"""
    +-----------------------------------------------+
    |            embedded button images             |
    +-----------------------------------------------+
    >>> import base64,os
    >>> fname = os.path.join( Asm4.iconPath , 'Icon.svg')
    >>> icondata = open(fname,'rb').read()
    >>> icon_b64 = base64.b64encode(icondata)
    >>> tname = os.path.join( Asm4.iconPath , 'Icon_b64.txt')
    >>> file_b64 = open(tname,'wb')
    >>> file_b64.write(icon_b64)
    10980
    >>> file_b64.close()
"""
import base64
# "b64_data" is a variable containing your base64 encoded icon
draftPoint_b64=\
"""
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAWdEVYdEF1dGhvcgBbeW9yaWt2YW5oYXZyZV3R/pfWAAAAG3RFWHREZXNjcmlwdGlvbgBBIGRvdCBvciBjaXJjbGUOOmfJAAAALHRFWHRDcmVhdGlvbiBUaW1lAFNhdCBEZWMgMTcgMTU6MzY6MDIgMjAxMSArMDAwMNC6QOkAAAP5SURBVHic7dhbb1RVGMbx/9pzFMSWKQMtNCBYHCo9aAqxYlRuuIF6uhD9DCghAWr8BhrKwYRWv4EJ8UIlgBfcEBNBTECm02O0KpJSQKZMa2n33mtmvV7M9ABGuVqTGNYvmcxMZrL2s57svfYBHMdxHMdxHMdxHMdxHMdxnMeHqubGdu4kmr9Nl4K9Au0KGioh8gZ+QHG6bjVfXbhAsVqZqlZAazO7FXwGbHjEX68r4YPsCGeqkasaBaj2Zj4R+BAg01Qzdmh/y42WzMr6RNJbgygVhKU7gyOFiaMn+xtHf5l+BhBRnMgNcRgQq+FsDg7QtoUeFIdjUS/o7Xnp0vYXVr0CRP7l73Ilm/9uf/fFF/3QJFEc6y+XYI3VAiq7/ZlEzAtOf7Erl04ntyOCEYMpGcQUkZIgniLiRYjEYygUk5P+ld3vnm8JtUl40HVtmLO2Mnq2Bn4HIgr6AHXi485L6XRyu4gQhiGh76MDHx1qtA4J/TlmZ6aZKRQwpkQqlezoO7bjRwADfR0dxGzltFbA6FbeBp7evOmpsc5t6ddEhGBuFh34FHVIUevKe0gx1BS1JpybZSp/F0HoaKt7uTlTOwZsCGfZYyuntQLE8CZA94HWG4BXDEN04FPSenHy4UNFaE0we5/ZqWkA7+D7LTcBFOy1lTNqa2APOgVoy6ysB/Dn7lPUGjEGYwwighiDiEFMeV0QU37NFCZZXlNDS6a2oTLc87ZyWitAIA0QS0TWAYT+HKZYQsRgjFQmvljE0lKKOgQgkYg0VoZbbyuntQKWjK0AilovFCDGYOb3gMpesLSU+ZOTyMI1gLYV0t4aANcBgqA0DqCUeuBYLx//82uAprTkt0i03J0fliYqw92xldNaAQqyAIOjhVsAyWVPLkz2gSIeKKX8fUWqDoCR0cJ8AZdt5bRZwJcAx3tza4HSipUpvGh0YeUv/eM0WP4cjSVIrWkAkKN9A2sBEL6xldNaAdFlnAGuD/88tflq9u73SinWbmwiEos/tAcsTj4WT7KppR3P87iazV8cHi1sBH7LjPC1rZzVuBQ+G495wblTuwZSqWSHMYb8xDj3bt/i/l9TiDE8sXwFqfoG0o3r8TyPyUKQff2985k5v5QQ6MoNc85WRvs3Q80cAbqTcc8/2bPjckd73av/sV3zU3/+0r7DF7cFoUmI4nhuiEM281Xldrj1OY4q4SBApqnm1+4DreNbn61tiMcj9UqRCALzx8DovZuffj64bnD43qZKsCPZYT7i/347PK99C12i6OXRD0R+F8W+3BDfViNX1R+JTf7JWxjeADqBVZQX4pvANVGcqlvN2Wo+EnMcx3Ecx3Ecx3Ecx3Ecx3EeJ38DdD0uzREulD4AAAAASUVORK5CYII=
"""
draftLine_b64=\
"""
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
"""
draftCircle_b64=\
"""
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
"""
draftDimension_b64=\
"""
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
"""
select_b64=\
"""
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
"""
valid_b64=\
"""
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
"""
Center_Mass_b64=\
"""
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjY0cHgiCiAgIGhlaWdodD0iNjRweCIKICAgaWQ9InN2ZzI5ODUiCiAgIHZlcnNpb249IjEuMSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4xIHIxNTM3MSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iQ2VudGVyT2ZNYXNzLnN2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczI5ODciPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzczIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6Izg4OGE4NTtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDM3NzUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkM2Q3Y2Y7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AzNzc3IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc5NCI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkM2Q3Y2Y7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AzNzk2IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMzc5OCIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM3OTQiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzODY3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iMzIuNzE0NzQ4IgogICAgICAgeTE9IjI3LjM5ODM1MiIKICAgICAgIHgyPSIzOC45OTc3MjYiCiAgICAgICB5Mj0iMy42NTIzMTI1IgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjkyODk2OTMxLDAsMCwwLjgwMTQ1NzEzLDEuODQwNzE3Nyw0LjQ0MzIyNTIpIgogICAgICAgc3ByZWFkTWV0aG9kPSJyZWZsZWN0IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzk0LTgiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZiNDAwO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDM3OTYtNSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZWEwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AzNzk4LTgiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICB5Mj0iMjMuODQ4Njg2IgogICAgICAgeDI9IjYyLjY1MjM3IgogICAgICAgeTE9IjIzLjg0ODY4NiIKICAgICAgIHgxPSIxNS4xODQ5NzEiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDI2NTU2OCwwLDAsMC45MTQ5MDYyNiwtMy4yMzY3MDYsLTEuODAyNzAzMikiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM4ODYiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzk0LTgiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM3OTQtMSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmI0MDA7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMzc5Ni0yIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZlYTAwO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDM3OTgtMiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSIyMy44NDg2ODYiCiAgICAgICB4Mj0iNjIuNjUyMzciCiAgICAgICB5MT0iMjMuODQ4Njg2IgogICAgICAgeDE9IjE1LjE4NDk3MSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wMjY1NTY4LDAsMCwwLjkxNDkwNjI2LC0zLjIzNjcwNiwtMS44MDI3MDMyKSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzg4Ni0wIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzc5NC0xIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzczIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc3OSIKICAgICAgIHgxPSI1Ny43MjQzNSIKICAgICAgIHkxPSIzNC40MzA0MDEiCiAgICAgICB4Mj0iNTAuNjIwMzgiCiAgICAgICB5Mj0iMjMuOTMzNjgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzgzNi0wIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M0YTAwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AzODM4LTIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmY2U5NGY7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMzg0MC01IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzgzNi0wLTYtOTItNC02IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzgwMS0xLTMtMTQtMC0zIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iLTE4IgogICAgICAgeTE9IjE4IgogICAgICAgeDI9Ii0yMiIKICAgICAgIHkyPSI1IgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjQyODU3MDE5LDEuMTk0MTM0OWUtOCwwLDAuNDI4NTcyOTcsNDEuMTAzOTA0LDI0LjIxMTQxMSkiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM4MzYtMC02LTkyLTQtNiI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNhNDAwMDA7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AzODM4LTItNy0wNi04LTciIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNlZjI5Mjk7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AzODQwLTUtNS04LTctNSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI5LjY4NzUiCiAgICAgaW5rc2NhcGU6Y3g9IjEzLjcyOTAzMiIKICAgICBpbmtzY2FwZTpjeT0iMzIiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpncmlkLWJib3g9InRydWUiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIyNTYwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEzNjEiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii05IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOSIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOnNuYXAtZ2xvYmFsPSJmYWxzZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgaWQ9ImdyaWQyOTk3IgogICAgICAgZW1wc3BhY2luZz0iMiIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIgogICAgICAgc25hcHZpc2libGVncmlkbGluZXNvbmx5PSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTI5OTAiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgICAgPGRjOmNyZWF0b3I+CiAgICAgICAgICA8Y2M6QWdlbnQ+CiAgICAgICAgICAgIDxkYzp0aXRsZT5beW9yaWt2YW5oYXZyZV08L2RjOnRpdGxlPgogICAgICAgICAgPC9jYzpBZ2VudD4KICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgICAgPGRjOnRpdGxlPkFyY2hfU2l0ZV9UcmVlPC9kYzp0aXRsZT4KICAgICAgICA8ZGM6ZGF0ZT4yMDExLTEyLTA2PC9kYzpkYXRlPgogICAgICAgIDxkYzpyZWxhdGlvbj5odHRwOi8vd3d3LmZyZWVjYWR3ZWIub3JnL3dpa2kvaW5kZXgucGhwP3RpdGxlPUFydHdvcms8L2RjOnJlbGF0aW9uPgogICAgICAgIDxkYzpwdWJsaXNoZXI+CiAgICAgICAgICA8Y2M6QWdlbnQ+CiAgICAgICAgICAgIDxkYzp0aXRsZT5GcmVlQ0FEPC9kYzp0aXRsZT4KICAgICAgICAgIDwvY2M6QWdlbnQ+CiAgICAgICAgPC9kYzpwdWJsaXNoZXI+CiAgICAgICAgPGRjOmlkZW50aWZpZXI+RnJlZUNBRC9zcmMvTW9kL0FyY2gvUmVzb3VyY2VzL2ljb25zL0FyY2hfU2l0ZV9UcmVlLnN2ZzwvZGM6aWRlbnRpZmllcj4KICAgICAgICA8ZGM6cmlnaHRzPgogICAgICAgICAgPGNjOkFnZW50PgogICAgICAgICAgICA8ZGM6dGl0bGU+RnJlZUNBRCBMR1BMMis8L2RjOnRpdGxlPgogICAgICAgICAgPC9jYzpBZ2VudD4KICAgICAgICA8L2RjOnJpZ2h0cz4KICAgICAgICA8Y2M6bGljZW5zZT5odHRwczovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci5odG1sPC9jYzpsaWNlbnNlPgogICAgICAgIDxkYzpjb250cmlidXRvcj4KICAgICAgICAgIDxjYzpBZ2VudD4KICAgICAgICAgICAgPGRjOnRpdGxlPlthZ3J5c29uXSBBbGV4YW5kZXIgR3J5c29uPC9kYzp0aXRsZT4KICAgICAgICAgIDwvY2M6QWdlbnQ+CiAgICAgICAgPC9kYzpjb250cmlidXRvcj4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpZD0ibGF5ZXIxIgogICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgIGlua3NjYXBlOmdyb3VwbW9kZT0ibGF5ZXIiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZpbGw6I2QzZDdjZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6IzJlMzQzNjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7bWFya2VyOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKICAgICAgIGQ9Ik0gMyw0MSAyOSw1MyAyOSw2MSAzLDQ5IHoiCiAgICAgICBpZD0icGF0aDM5MDQiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIxMTMuMTIzIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjExMy4xMjMiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50Mzc3OSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMyZTM0MzY7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICBkPSJNIDYxLDExIDYxLDM1IDI5LDYxIDI5LDUzIDQwLjc3NDc0MywxMy45Mzk1OCB6IgogICAgICAgaWQ9InBhdGgzODY5IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjExMy4xMjMiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMTEzLjEyMyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50Mzg2Nyk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMyZTM0MzY7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZSIKICAgICAgIGQ9Ik0gMzUsMyAyMywxMyAxNywyOSAzLDQxIDI5LDUzIDQwLjY4MzI1LDQwLjIwODI0OSA0OSwyMyA2MSwxMSB6IgogICAgICAgaWQ9InBhdGgzNzYzIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjExMy4xMjMiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMTEzLjEyMyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZDNkN2NmO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMwLjk4MjY1OCw1My43OTc3MjQgMzEsNTYuODA5MTA0IDU4Ljk4MjY1OCwzNC4wNTIwMjUgbCAwLC0xOC4xODQ5MzQgLTguMzEyMTUzLDguMzIzNjY5IC04LjM0NjgzNiwxNy4xMjEzOTMgeiIKICAgICAgIGlkPSJwYXRoMjk5OSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iMTEzLjEyMyIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSIxMTMuMTIzIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNS4wMTA1NTQ2LDQ0LjE2OTM2OSA0Ljk5MDk1OTMsNDcuNzA2MzggMjcuMDE2ODE4LDU3Ljg4MzA1NSAyNi45NzU0NjIsNTQuMjc5NDQxIHoiCiAgICAgICBpZD0icGF0aDMwMDEiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIxMTMuMTIzIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjExMy4xMjMiIC8+CiAgICA8ZwogICAgICAgaWQ9Imc0NTMxIgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS42MjkxNDQ2LDAsMCwxLjYyOTE0NDYsLTE1LjIyNzE2LC0yMy4yOTkzNDcpIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjExMy4xMjMiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMTEzLjEyMyI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI0OS41NDg3OTgiCiAgICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI0OS41NDg3OTgiCiAgICAgICAgIGQ9Im0gMjkuMDIyMDA2LDI1Ljg1ODgwMyBhIDUuMDE3NTkxMiw1LjAxNzI4OTcgMC4wMTMyODMwNiAxIDEgNy42MjIxNjgsNi41MjcwNDIgNS4wMTc1OTEyLDUuMDE3Mjg5NyAwLjAxMzI4MzA2IDEgMSAtNy42MjIxNjgsLTYuNTI3MDQyIHoiCiAgICAgICAgIGlkPSJwYXRoNDI1MC03MS02LTQ5LTIiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNlZjI5Mjk7c3Ryb2tlOiNhNDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjQ5LjU0ODc5OCIKICAgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjQ5LjU0ODc5OCIKICAgICAgICAgZD0ibSAzMC41NDY2ODMsMjcuMTY1ODE2IGEgMy4wMDAwMTA4LDIuOTk5OTkxMyA4OS44NzczOTkgMSAxIDQuNTU3MjM4LDMuOTAyNzYxIDMuMDAwMDEwOCwyLjk5OTk5MTMgODkuODc3Mzk5IDAgMSAtNC41NTcyMzgsLTMuOTAyNzYxIHoiCiAgICAgICAgIGlkPSJwYXRoNDI1MC03LTMtMi01LTciCiAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQzODAxLTEtMy0xNC0wLTMpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZWYyOTI5O3N0cm9rZS13aWR0aDoxLjk5OTk5OTQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDwvZz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDYuNjU5NDIwNCw0MC40Njc4NjEgMTguNjk1NDc2LDMwLjE2NjMyMyAyNC42OTc5NSwxNC4xOTI2NTEgMzUuNTcwMjM3LDUuMjc4MTIzIDU3LjE1MzI5NSwxMS45MDkzMjEgNDcuMzU2NzExLDIxLjc3MDM0MiAzOC45ODc0MjMsMzkuMDcxMTY2IDI4LjQ3MjM0Miw1MC41MzgwMDUgeiIKICAgICAgIGlkPSJwYXRoMzAwMyIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjYyIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSIxMTMuMTIzIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjExMy4xMjMiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzJlMzQzNjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzNSwzLjAwMDAwMDUgMjMsMTMgMTcsMjkgMyw0MSAyOSw1MyA0MC42ODMyNSw0MC4yMDgyNDkgNDksMjMgNjEsMTEgWiIKICAgICAgIGlkPSJwYXRoMzc2My0xIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjExMy4xMjMiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iMTEzLjEyMyIgLz4KICA8L2c+Cjwvc3ZnPgo=
"""
Snap_Options_b64=\
"""
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjE5MiIKICAgaGVpZ2h0PSI2NCIKICAgaWQ9InN2ZzI3MjYiCiAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMSByMTUzNzEiCiAgIHNvZGlwb2RpOmRvY25hbWU9IlNuYXBfT3B0aW9ucy5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIgogICB2ZXJzaW9uPSIxLjEiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMyNzI4Ij4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc3OSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwNjk4OWE7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AzNzgxIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMzRlMGUyO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMzc4MyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMxNDQiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ0Mjc0IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDAuNjk4NTI5NCwwLDIwMi44Mjg2MykiCiAgICAgICBjeD0iMjI1LjI2NDAyIgogICAgICAgY3k9IjY3Mi43OTczNiIKICAgICAgIGZ4PSIyMjUuMjY0MDIiCiAgICAgICBmeT0iNjcyLjc5NzM2IgogICAgICAgcj0iMzQuMzQ1MTg4IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMTQ0Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AzMTQ2IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eTowOyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDMxNDgiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMTQ0IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NDI3MiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwwLjY5ODUyOTQsMCwyMDIuODI4NjMpIgogICAgICAgY3g9IjIyNS4yNjQwMiIKICAgICAgIGN5PSI2NzIuNzk3MzYiCiAgICAgICBmeD0iMjI1LjI2NDAyIgogICAgICAgZnk9IjY3Mi43OTczNiIKICAgICAgIHI9IjM0LjM0NTE4OCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAzMiA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI2NCA6IDMyIDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzMiA6IDIxLjMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzM0IiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMTQ0IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50MzAxMSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwwLjY5ODUyOTQsMCwyMDIuODI4NjMpIgogICAgICAgY3g9IjIyNS4yNjQwMiIKICAgICAgIGN5PSI2NzIuNzk3MzYiCiAgICAgICBmeD0iMjI1LjI2NDAyIgogICAgICAgZnk9IjY3Mi43OTczNiIKICAgICAgIHI9IjM0LjM0NTE4OCIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzc3OSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM3ODUiCiAgICAgICB4MT0iMTcwLjIwNDkxIgogICAgICAgeTE9IjcyOC44MzYzNiIKICAgICAgIHgyPSIxNDYuMDgwNjMiCiAgICAgICB5Mj0iNTA4LjM4NzE1IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzk0Ljc0OTQxLDcuNzgyNTQ4NmUtNikiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzc5IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc4OCIKICAgICAgIHgxPSIxNzAuNDc4NjgiCiAgICAgICB5MT0iNzQwLjgyNjExIgogICAgICAgeDI9IjE0NS44MDY4NCIKICAgICAgIHkyPSI0ODEuNzcxODgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjE0MjY2OCwwLDAsMS4xNDI2NjgxLC0xMDM3LjEyNDgsLTE1MjYuNTc5OSkiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzc5IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzgyNSIKICAgICAgIHgxPSIxODguNjA3MTkiCiAgICAgICB5MT0iNjE1LjAwNjM1IgogICAgICAgeDI9IjIwNi43MjgzMyIKICAgICAgIHkyPSI2OTAuMTM3MzkiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg3ODkuNDk4ODUsMS4xMzkzMjk3ZS02KSIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM3NzkiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzODMzIgogICAgICAgeDE9IjIxMy42NTQzOSIKICAgICAgIHkxPSI3NzEuNjY1ODkiCiAgICAgICB4Mj0iMTAyLjYzMTEzIgogICAgICAgeTI9IjQ1MC45MzIwNyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMy42MDQwMDM4IgogICAgIGlua3NjYXBlOmN4PSItNC40NTAzNTE1IgogICAgIGlua3NjYXBlOmN5PSIyNy4yNTYyNjYiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iZzQyODkiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjI1NjAiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTM2MSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTkiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii05IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6c25hcC1ub2Rlcz0idHJ1ZSIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9ImZhbHNlIgogICAgIGlua3NjYXBlOnNuYXAtZ2xvYmFsPSJmYWxzZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgaWQ9ImdyaWQyOTkxIgogICAgICAgZW1wc3BhY2luZz0iMiIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIgogICAgICAgc25hcHZpc2libGVncmlkbGluZXNvbmx5PSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxnCiAgICAgaWQ9ImxheWVyMSIKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIj4KICAgIDxnCiAgICAgICBpZD0iZzQyODkiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjE2MjEyODIsMCwwLDAuMTYyMTI4Miw2LjM2MDU5ODYsLTY2LjEwODgwNikiPgogICAgICA8cGF0aAogICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQzNzg1KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6IzA0MmEyYTtzdHJva2Utd2lkdGg6MTIuMzM1OTE2NTI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICAgIGQ9Ik0gMjc3LjgzNDIsNDUwLjkzMjA4IDkxLjI1MTAxNSw2MTguNzU3MjcgYyAtOC45MTgzMzUsLTMuNTU2NDcgLTE4LjY1MDUzNCwtNS40MTI4MiAtMjguODU3MTQ1LC01LjEzOTUyIC00MC4yMDY4MTUsMS4wNzY2NSAtNzEuODM1ODI4NSwzNC41MDk0MyAtNzAuNzU5MzAxLDc0LjcyMDc3IDEuMDc2NTI3Miw0MC4yMTEzNSAzNC41MDU1MTksNzIuMDQxNiA3NC43MTIzMzQsNzAuOTY0OTYgNDAuMjA2ODE3LC0xLjA3NjY1IDcyLjAzMzQ4NywtMzQuNzA3MSA3MC45NTY5NTcsLTc0LjkxODQ1IC0wLjEwNTQ5LC0zLjkzOTk1IC0wLjY4MDMsLTcuNzEwOTQgLTEuMzgzNTYsLTExLjQ2NTA4IEwgMzI0LjY3NzY0LDUwMy4xMTgwMSBaIgogICAgICAgICBpZD0icmVjdDIyNjkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1NC44NTcxNDMiCiAgICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1NC44NTcxNDMiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7dmlzaWJpbGl0eTp2aXNpYmxlO2ZpbGw6bm9uZTtzdHJva2U6IzM0ZTBlMjtzdHJva2Utd2lkdGg6MTIuMzM1OTE2NTI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICAgIGQ9Ik0gMjc2Ljc0Mzg1LDQ2OC42NDI5NyA5NC4wODQyMyw2MzIuNTc4MzEgYyAtOC45MTgzMywtMy41NTY0NyAtMjUuMjYzNTY5LC03LjE5NzcyIC0zNi4wMTY1MjMsLTUuNzcxNDcgLTM1LjkxMzgzNiw0Ljc2MzU3IC01My44NjIzOTcyLDMwLjQxOTA1IC01NC4xMjM5MDU3LDY0LjY3NTYyIC0wLjI0OTU4NjIsMzIuNjk0NzggMzYuMzkwNjcxNyw1NS4xMTUxMyA1NS41MTE2MjU3LDU1LjUxMTYyIDI2LjY0ODU2MiwwLjU1MjU5IDYyLjg2MDcyMywtMTMuNzI3OSA2NS4wNzIxMDMsLTYyLjI3NDMyIDAuMjQ5NTcsLTUuNDc4NzcgLTAuOTA1MDUsLTExLjM3OTU2IC0yLjk5NjAzLC0xNS41MzAxOSBsIDE4NS43MzI2MSwtMTY3LjAzMDUgeiIKICAgICAgICAgaWQ9InJlY3QyMjY5LTEiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2Nzc3NzY2NjIgogICAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTQuODU3MTQzIgogICAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTQuODU3MTQzIiAvPgogICAgICA8cGF0aAogICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQzNzg4KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6IzA0MmEyYTtzdHJva2Utd2lkdGg6MTIuMzM1OTE2NTI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICAgIGQ9Im0gNjgwLjgwNTAxLDQzOC41OTYxNiAtOTcuMjYzNyw4OS40OTU3MyBjIC05LjQ3NDA3LC00LjAyNjE1IC0xOS44NjAzMywtNi40NTQ3NSAtMzAuNzM0NTgsLTYuNzA3MzggLTQ2Ljk2NDIyLC0xLjA5MTExIC04NS44ODk0MSwzNy4wNjI4MyAtODYuOTU2NCw4NS4wODgwMSAtMC4yMDY2OSw5LjMwMzUzIDEuMTAyMDIsMTguMTcyMzUgMy41NjA3MSwyNi42Mzc5MiBsIC05NS4zODk2Niw4Ny43NzA5NyA0NC42MDI2Myw1MC43ODQ1MSA5My41MTU2MSwtODYuMDQ2MjEgYyAxMS4wODUyOCw1LjgyNDc4IDIzLjQzNDgzLDkuNDY0NzEgMzYuNzMxNTgsOS43NzM2MiA0Ni45NjQyMSwxLjA5MTExIDg2LjA3Njc4LC0zNy4wNjI4MyA4Ny4xNDM3NywtODUuMDg4MDEgMC4yNjA1MywtMTEuNzI3NTggLTEuOTIwNywtMjIuODQ5NDYgLTUuODA5NTgsLTMzLjE1MzY3IGwgOTUuMzg5NjUsLTg3Ljc3MDk3IHoiCiAgICAgICAgIGlkPSJyZWN0MjI2OS0yIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTQuODU3MTQzIgogICAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTQuODU3MTQzIiAvPgogICAgICA8cGF0aAogICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtmaWxsOm5vbmU7c3Ryb2tlOiMzNGUwZTI7c3Ryb2tlLXdpZHRoOjEyLjMzNTkxNjUyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgICBkPSJtIDY4MC4wNjEwMSw0NTYuNDU3MTkgLTkzLjk5NTg0LDg1Ljg1MTUyIGMgLTcuOTc4MTYsLTMuNDI5NjggLTI0LjAxMzkxLC04LjMwMjExIC0zMy4xNzExNiwtOC41MTcyOSAtMzkuNTQ4ODEsLTAuOTI5NDggLTczLjY1MDA0LDMxLjM2MjEgLTc0LjU0ODU2LDcyLjI3MjQzIC0wLjE3NDA2LDcuOTI1MjMgMi42MzAxMiwyNC4yNTEwOSA0LjcwMDU5LDMxLjQ2MjUgbCAtOTEuMzgxOCw4NC4zNTE2NiAyNy43MTU4NSwzMi4yNzUyNiA5MC44NzcwMiwtODMuODUzNzYgYyA5LjMzNDk1LDQuOTYxODcgMjUuODgyNiwxMi4yOTk1NSAzNy4wNzk4NywxMi41NjI3MSAzOS41NDg4MSwwLjkyOTQ1IDc1LjAwODk3LC0yOS42MDk1MiA3Ni4xODc4NCwtNzMuODg0MTkgMC4yNjU5NiwtOS45ODkwMiAtNC43MDE0LC0yNi40NzM0MSAtNy45NzYyMywtMzUuMjUxMDUgbCA5Mi42NjQwMiwtODUuMTQxMjUgeiIKICAgICAgICAgaWQ9InJlY3QyMjY5LTEtMyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY3NzY2NjY3NzY2NjIgogICAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTQuODU3MTQzIgogICAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTQuODU3MTQzIiAvPgogICAgICA8cGF0aAogICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQzODMzKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6IzA0MmEyYTtzdHJva2Utd2lkdGg6MTIuMzM1OTE2NTI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICAgIGQ9Im0gOTQ3LjU0NDg2LDQzOC41OTYxNiBjIC05Mi4wMDQwNSwwIC0xNjYuNDM4MTIsNzQuNjI3NTkgLTE2Ni40MzgxMiwxNjYuNjMxNjQgMCw5Mi4wMDQwNSA3NC40MzQwNywxNjYuNDM4MTIgMTY2LjQzODEyLDE2Ni40MzgxMiA5Mi4wMDQwNCwwIDE2Ni42MzE0NCwtNzQuNDM0MDcgMTY2LjYzMTQ0LC0xNjYuNDM4MTIgMCwtOTIuMDA0MDUgLTc0LjYyNzQsLTE2Ni42MzE2NCAtMTY2LjYzMTQ0LC0xNjYuNjMxNjQgeiBtIDAuMDk2OCw2MS42Nzk1NyBjIDYwLjYyMzQ0LDAgMTA0Ljg1NTI0LDQ0LjIzMTkgMTA0Ljg1NTI0LDEwNC44NTUzIDAsNjAuNjIzNDUgLTQ0LjIzMTgsMTA0Ljg1NTMgLTEwNC44NTUyNCwxMDQuODU1MyAtNjAuNjIzNDIsMCAtMTA0Ljg1NTMsLTQ0LjIzMTg1IC0xMDQuODU1MywtMTA0Ljg1NTMgMCwtNjAuNjIzNCA0NC4yMzE4OCwtMTA0Ljg1NTMgMTA0Ljg1NTMsLTEwNC44NTUzIHoiCiAgICAgICAgIGlkPSJwYXRoNDM2NCIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJzc3Nzc3Nzc3NzIgogICAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTQuODU3MTQzIgogICAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTQuODU3MTQzIiAvPgogICAgICA8ZWxsaXBzZQogICAgICAgICByeT0iNTUuNTAxMDI2IgogICAgICAgICByeD0iNTUuNTAxMDE5IgogICAgICAgICBjeT0iLTc3Ny44Nzk3IgogICAgICAgICBjeD0iLTgxMS44NTU2NSIKICAgICAgICAgaWQ9InBhdGgzMTYyIgogICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQzODI1KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6IzA0MmEyYTtzdHJva2Utd2lkdGg6MTIuMzM1OTE2NTI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICAgIHRyYW5zZm9ybT0icm90YXRlKDE2OC43ODUyMykiCiAgICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1NC44NTcxNDMiCiAgICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1NC44NTcxNDMiIC8+CiAgICAgIDxjaXJjbGUKICAgICAgICAgcj0iMTU0LjE2OTUxIgogICAgICAgICBjeT0iLTc3Ny44Nzk3NiIKICAgICAgICAgY3g9Ii04MTEuODU1NjUiCiAgICAgICAgIGlkPSJwYXRoMzE2Mi0xIgogICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtmaWxsOm5vbmU7c3Ryb2tlOiMzNGUwZTI7c3Ryb2tlLXdpZHRoOjEyLjMzNTkxNjUyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgICB0cmFuc2Zvcm09InJvdGF0ZSgxNjguNzg1MjMpIgogICAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTQuODU3MTQzIgogICAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTQuODU3MTQzIiAvPgogICAgICA8ZWxsaXBzZQogICAgICAgICByeT0iMTE3LjE2ODgzIgogICAgICAgICByeD0iMTE3LjE2ODgyIgogICAgICAgICBjeT0iLTc3Ny44Nzk3NiIKICAgICAgICAgY3g9Ii04MTEuODU1NzEiCiAgICAgICAgIGlkPSJwYXRoMzE2Mi0xLTciCiAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7dmlzaWJpbGl0eTp2aXNpYmxlO2ZpbGw6bm9uZTtzdHJva2U6IzM0ZTBlMjtzdHJva2Utd2lkdGg6MTIuMzM1OTE2NTI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICAgIHRyYW5zZm9ybT0icm90YXRlKDE2OC43ODUyMykiCiAgICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1NC44NTcxNDMiCiAgICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1NC44NTcxNDMiIC8+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgIHJ5PSI0My4xNjc0NjkiCiAgICAgICAgIHJ4PSI0My4xNjc0NjEiCiAgICAgICAgIGN5PSItNzc3Ljg3OTciCiAgICAgICAgIGN4PSItODExLjg1NTY1IgogICAgICAgICBpZD0icGF0aDMxNjItMS03LTQiCiAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7dmlzaWJpbGl0eTp2aXNpYmxlO2ZpbGw6bm9uZTtzdHJva2U6IzM0ZTBlMjtzdHJva2Utd2lkdGg6MTIuMzM1OTE2NTI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICAgIHRyYW5zZm9ybT0icm90YXRlKDE2OC43ODUyMykiCiAgICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1NC44NTcxNDMiCiAgICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1NC44NTcxNDMiIC8+CiAgICA8L2c+CiAgPC9nPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTYzMDUiPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgICAgPGNjOmxpY2Vuc2UKICAgICAgICAgICByZGY6cmVzb3VyY2U9IiIgLz4KICAgICAgICA8ZGM6ZGF0ZT5Nb24gTWFyIDEyIDE3OjIwOjAzIDIwMTIgLTAzMDA8L2RjOmRhdGU+CiAgICAgICAgPGRjOmNyZWF0b3I+CiAgICAgICAgICA8Y2M6QWdlbnQ+CiAgICAgICAgICAgIDxkYzp0aXRsZT5bWW9yaWsgdmFuIEhhdnJlXTwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6Y3JlYXRvcj4KICAgICAgICA8ZGM6cmlnaHRzPgogICAgICAgICAgPGNjOkFnZW50PgogICAgICAgICAgICA8ZGM6dGl0bGU+RnJlZUNBRCBMR1BMMis8L2RjOnRpdGxlPgogICAgICAgICAgPC9jYzpBZ2VudD4KICAgICAgICA8L2RjOnJpZ2h0cz4KICAgICAgICA8ZGM6cHVibGlzaGVyPgogICAgICAgICAgPGNjOkFnZW50PgogICAgICAgICAgICA8ZGM6dGl0bGU+RnJlZUNBRDwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6cHVibGlzaGVyPgogICAgICAgIDxkYzppZGVudGlmaWVyPkZyZWVDQUQvc3JjL01vZC9EcmFmdC9SZXNvdXJjZXMvaWNvbnMvU25hcF9FbmRwb2ludC5zdmc8L2RjOmlkZW50aWZpZXI+CiAgICAgICAgPGRjOnJlbGF0aW9uPmh0dHA6Ly93d3cuZnJlZWNhZHdlYi5vcmcvd2lraS9pbmRleC5waHA/dGl0bGU9QXJ0d29yazwvZGM6cmVsYXRpb24+CiAgICAgICAgPGRjOmNvbnRyaWJ1dG9yPgogICAgICAgICAgPGNjOkFnZW50PgogICAgICAgICAgICA8ZGM6dGl0bGU+W2Fncnlzb25dIEFsZXhhbmRlciBHcnlzb248L2RjOnRpdGxlPgogICAgICAgICAgPC9jYzpBZ2VudD4KICAgICAgICA8L2RjOmNvbnRyaWJ1dG9yPgogICAgICAgIDxkYzpzdWJqZWN0PgogICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgIDxyZGY6bGk+bGluZTwvcmRmOmxpPgogICAgICAgICAgICA8cmRmOmxpPmVuZHBvaW50PC9yZGY6bGk+CiAgICAgICAgICAgIDxyZGY6bGkgLz4KICAgICAgICAgIDwvcmRmOkJhZz4KICAgICAgICA8L2RjOnN1YmplY3Q+CiAgICAgICAgPGRjOmRlc2NyaXB0aW9uPmxpbmUgd2l0aCBidWxnZSBhdCBvbmUgZW5kcG9pbnQ8L2RjOmRlc2NyaXB0aW9uPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KPC9zdmc+Cg==
"""
Dim_Radius_b64=\
"""
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjY0cHgiCiAgIGhlaWdodD0iNjRweCIKICAgaWQ9InN2ZzU4MjEiCiAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMCByMTUyOTkiCiAgIHNvZGlwb2RpOmRvY25hbWU9IkRpbWVuc2lvbl9SYWRpdXMuc3ZnIgogICBpbmtzY2FwZTpvdXRwdXRfZXh0ZW5zaW9uPSJvcmcuaW5rc2NhcGUub3V0cHV0LnN2Zy5pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9Ii9ob21lL3VzZXIvRG93bmxvYWRzL2NhZC9teXN0dWZmL2ljb25zL0RyYXdpbmcvVGVjaERyYXdfZGltZW5zaW9ucy9kcmF3aW5nX0RpbWVuc2lvbl9SYWRpdXNfNV8zMnB4LnBuZyIKICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjQ1IgogICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNDUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM1ODIzIj4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzAyOSIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzAzMSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYzRhMDAwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDMwMzMiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZjZTk0ZjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMwMjMiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDMwMjUiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M0YTAwMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzMDI3IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmY2U5NGY7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzODEwIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M0YTAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDM4MTIiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmY2U5NGY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AzODE0IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50NjM0OSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wNjM1MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3A2MzUzIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzM3NyI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDE5YTM7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMzM3OSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwNjlmZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AzMzgxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzM3NyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMzODMiCiAgICAgICB4MT0iOTAxLjE4NzUiCiAgICAgICB5MT0iMTE5MC44NzUiCiAgICAgICB4Mj0iMTI2Ny45MDYyIgogICAgICAgeTI9IjExOTAuODc1IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0xLDAsMCwxLDIxOTkuMzU2LDApIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU4MjkiIC8+CiAgICA8cmFkaWFsR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDYzNDkiCiAgICAgICBpZD0icmFkaWFsR3JhZGllbnQ2MzU1IgogICAgICAgY3g9IjExMDMuNjM5OSIKICAgICAgIGN5PSIxNDI0LjQ0NjUiCiAgICAgICBmeD0iMTEwMy42Mzk5IgogICAgICAgZnk9IjE0MjQuNDQ2NSIKICAgICAgIHI9IjE5NC40MDYxNCIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTEuNDMwNzQ5OSwtMS4zNjA1MTU2ZS03LC0xLjIwMjcxM2UtOCwwLjEyNjQ4MDEsMjY3NC43NDg4LDEyNDQuMjgyNikiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzgxMCIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM4MTYiCiAgICAgICB4MT0iMzYuNDY1MzciCiAgICAgICB5MT0iNDEuOTk4Njc2IgogICAgICAgeDI9IjI2LjIzMjk0NiIKICAgICAgIHkyPSItMC43OTE0NjM1NSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNjY0OTY2MDQsMC42NzQwMzYzMiwtMC42NjQ5NjYwNCwwLjY3NDAzNjMyLDMxLjk2NDI4NSwtMTEuMjkzMDg3KSIKICAgICAgIHkyPSIyOC4zOTkxODUiCiAgICAgICB4Mj0iMjUuNDQ1MjIzIgogICAgICAgeTE9IjQwLjIyNzUwOSIKICAgICAgIHgxPSI0My4yODg4OTEiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQwNzUiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzODkzIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzODkzIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2QzZDdjZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDM4OTUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AzODk3IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjI4LjM5OTE4NSIKICAgICAgIHgyPSIyNS40NDUyMjMiCiAgICAgICB5MT0iNDAuMjI3NTA5IgogICAgICAgeDE9IjQzLjI4ODg5MSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC42NjQ5NjYwNCwwLjY3NDAzNjMyLC0wLjY2NDk2NjA0LDAuNjc0MDM2MzIsMjQuOTc0NDksLTUuOTAwNzk2KSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzEwNyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM4OTMiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM5MDUiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzOTE5IgogICAgICAgeDE9IjkiCiAgICAgICB5MT0iNTAiCiAgICAgICB4Mj0iNSIKICAgICAgIHkyPSIzOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzOTA1Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2QzZDdjZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDM5MDciIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AzOTA5IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzkwNSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM5MTEiCiAgICAgICB4MT0iOC41IgogICAgICAgeTE9IjQ4LjUiCiAgICAgICB4Mj0iNS41IgogICAgICAgeTI9IjM5LjUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgeTI9IjM5LjUiCiAgICAgICB4Mj0iNS41IgogICAgICAgeTE9IjQ4LjUiCiAgICAgICB4MT0iOC41IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMDQ3IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzkwNSIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzkwNSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM4ODUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIHgxPSI4LjUiCiAgICAgICB5MT0iNDguNSIKICAgICAgIHgyPSI1LjUiCiAgICAgICB5Mj0iMzkuNSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzAyOSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM4ODciCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC42NjQ5NjYwNCwwLjY3NDAzNjMyLC0wLjY2NDk2NjA0LDAuNjc0MDM2MzIsMjQuOTc0NDksLTUuOTAwNzk2KSIKICAgICAgIHgxPSI0My4yODg4OTEiCiAgICAgICB5MT0iNDAuMjI3NTA5IgogICAgICAgeDI9IjI1LjQ0NTIyMyIKICAgICAgIHkyPSIyOC4zOTkxODUiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMwMjMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzODg5IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICB4MT0iOSIKICAgICAgIHkxPSI1MCIKICAgICAgIHgyPSI1IgogICAgICAgeTI9IjM4IiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iOS42ODc1IgogICAgIGlua3NjYXBlOmN4PSIzMiIKICAgICBpbmtzY2FwZTpjeT0iMzIiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpncmlkLWJib3g9InRydWUiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxNTM2IgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjgwMSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgc2hvd2d1aWRlcz0idHJ1ZSIKICAgICBpbmtzY2FwZTpndWlkZS1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOnNuYXAtZ2xvYmFsPSJ0cnVlIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpvYmplY3QtcGF0aHM9ImZhbHNlIgogICAgIGlua3NjYXBlOnNuYXAtbm9kZXM9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIHR5cGU9Inh5Z3JpZCIKICAgICAgIGlkPSJncmlkMjk5MyIKICAgICAgIGVtcHNwYWNpbmc9IjIiCiAgICAgICB2aXNpYmxlPSJ0cnVlIgogICAgICAgZW5hYmxlZD0idHJ1ZSIKICAgICAgIHNuYXB2aXNpYmxlZ3JpZGxpbmVzb25seT0idHJ1ZSIgLz4KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE1ODI2Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICAgIDxkYzpjcmVhdG9yPgogICAgICAgICAgPGNjOkFnZW50PgogICAgICAgICAgICA8ZGM6dGl0bGU+W1dhbmRlcmVyRmFuXTwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6Y3JlYXRvcj4KICAgICAgICA8ZGM6dGl0bGU+VGVjaERyYXdfRGltZW5zaW9uX1JhZGl1czwvZGM6dGl0bGU+CiAgICAgICAgPGRjOmRhdGU+MjAxNi0wNC0yNzwvZGM6ZGF0ZT4KICAgICAgICA8ZGM6cmVsYXRpb24+aHR0cDovL3d3dy5mcmVlY2Fkd2ViLm9yZy93aWtpL2luZGV4LnBocD90aXRsZT1BcnR3b3JrPC9kYzpyZWxhdGlvbj4KICAgICAgICA8ZGM6cHVibGlzaGVyPgogICAgICAgICAgPGNjOkFnZW50PgogICAgICAgICAgICA8ZGM6dGl0bGU+RnJlZUNBRDwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6cHVibGlzaGVyPgogICAgICAgIDxkYzppZGVudGlmaWVyPkZyZWVDQUQvc3JjL01vZC9UZWNoRHJhdy9HdWkvUmVzb3VyY2VzL2ljb25zL1RlY2hEcmF3X0RpbWVuc2lvbl9SYWRpdXMuc3ZnPC9kYzppZGVudGlmaWVyPgogICAgICAgIDxkYzpyaWdodHM+CiAgICAgICAgICA8Y2M6QWdlbnQ+CiAgICAgICAgICAgIDxkYzp0aXRsZT5GcmVlQ0FEIExHUEwyKzwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6cmlnaHRzPgogICAgICAgIDxjYzpsaWNlbnNlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwtMy4wLmVuLmh0bWwiPmh0dHBzOi8vd3d3LmdudS5vcmcvY29weWxlZnQvbGVzc2VyLmh0bWw8L2NjOmxpY2Vuc2U+CiAgICAgICAgPGRjOmNvbnRyaWJ1dG9yPgogICAgICAgICAgPGNjOkFnZW50PgogICAgICAgICAgICA8ZGM6dGl0bGU+W2Fncnlzb25dIEFsZXhhbmRlciBHcnlzb248L2RjOnRpdGxlPgogICAgICAgICAgPC9jYzpBZ2VudD4KICAgICAgICA8L2RjOmNvbnRyaWJ1dG9yPgogICAgICAgIDxkYzpzdWJqZWN0PgogICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgIDxyZGY6bGk+YXJyb3c8L3JkZjpsaT4KICAgICAgICAgICAgPHJkZjpsaT5yYWRpdXM8L3JkZjpsaT4KICAgICAgICAgICAgPHJkZjpsaT5hcmM8L3JkZjpsaT4KICAgICAgICAgIDwvcmRmOkJhZz4KICAgICAgICA8L2RjOnN1YmplY3Q+CiAgICAgICAgPGRjOmRlc2NyaXB0aW9uPkFycm93IHBvaW50aW5nIGZyb20gY2VudHJlIHRvIGFyYzwvZGM6ZGVzY3JpcHRpb24+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaWQ9ImxheWVyMSIKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIj4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMzAyYjAwO3N0cm9rZS13aWR0aDo3LjQ0MTc2MzQwMDAwMDAwMDEwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjAiCiAgICAgICBpZD0icGF0aDM3NjUiCiAgICAgICBzb2RpcG9kaTpjeD0iMTYiCiAgICAgICBzb2RpcG9kaTpjeT0iNDIiCiAgICAgICBzb2RpcG9kaTpyeD0iNDAiCiAgICAgICBzb2RpcG9kaTpyeT0iNDAiCiAgICAgICBkPSJNIDEzLjI1OTY4MSwyLjA5Mzk3NzMgQSA0MCw0MCAwIDAgMSA1Niw0Mi4wMDI4NiIKICAgICAgIHNvZGlwb2RpOnN0YXJ0PSI0LjY0MzgyNzMiCiAgICAgICBzb2RpcG9kaTplbmQ9IjYuMjgzMjU2OCIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMDc1MDE0LDAsMCwxLjA3NTAxNCwtNC4yMDA3ODM5LDYuODQ2MzM3OCkiCiAgICAgICBzb2RpcG9kaTpvcGVuPSJ0cnVlIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjU2LjE0NzAzIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjU2LjE0NzAzIiAvPgogICAgPHBhdGgKICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQzODE2KTtzdHJva2Utd2lkdGg6My43MjA4ODE3O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjAiCiAgICAgICBpZD0icGF0aDM3NjUtMSIKICAgICAgIHNvZGlwb2RpOmN4PSIxNiIKICAgICAgIHNvZGlwb2RpOmN5PSI0MiIKICAgICAgIHNvZGlwb2RpOnJ4PSI0MCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0MCIKICAgICAgIGQ9Ik0gMTMuMzAxMDQ1LDIuMDkxMTU4NCBBIDQwLDQwIDAgMCAxIDU2LDQyLjAwMjg2IgogICAgICAgc29kaXBvZGk6c3RhcnQ9IjQuNjQ0ODYzOCIKICAgICAgIHNvZGlwb2RpOmVuZD0iNi4yODMyNTY4IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4wNzUwMTQsMCwwLDEuMDc1MDE0LC00LjIwMTk4NTUsNi44NDk0MzM3KSIKICAgICAgIHNvZGlwb2RpOm9wZW49InRydWUiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTYuMTQ3MDMiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTYuMTQ3MDMiIC8+CiAgICA8cGF0aAogICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIgogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZjZTk0ZjtzdHJva2Utd2lkdGg6MS44NjA0NDA4NTAwMDAwMDAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowIgogICAgICAgaWQ9InBhdGgzNzY1LTEtNyIKICAgICAgIHNvZGlwb2RpOmN4PSIxNiIKICAgICAgIHNvZGlwb2RpOmN5PSI0MiIKICAgICAgIHNvZGlwb2RpOnJ4PSI0MCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0MCIKICAgICAgIGQ9Ik0gMTIuNjU4MjYsMi4xMzk4MzQ3IEEgNDAsNDAgMCAwIDEgNTUuOTgzNDg3LDQzLjE0OTIzOCIKICAgICAgIHNvZGlwb2RpOnN0YXJ0PSI0LjYyODc0OCIKICAgICAgIHNvZGlwb2RpOmVuZD0iNi4zMTE5MjAyIgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4wNzUwMTQsMCwwLDEuMDc1MDE0LC0zLjIwMTk4NTUsNS44NDk0MzM3KSIKICAgICAgIHNvZGlwb2RpOm9wZW49InRydWUiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTYuMTQ3MDMiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTYuMTQ3MDMiIC8+CiAgICA8ZwogICAgICAgaWQ9ImczODc0IgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEuMDEwMjA1LDEuNjA3NzA5KSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1Ni4xNDcwMyIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1Ni4xNDcwMyI+CiAgICAgIDxwYXRoCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEuMzMzMzMzMywwLDAsMS4zMzMzMzMxLDUuNjc2ODcxOSwtMTEuMjc0MzY0KSIKICAgICAgICAgZD0ibSAxMyw0NCBhIDYsNiAwIDAgMSAtNiw2IDYsNiAwIDAgMSAtNiwtNiA2LDYgMCAwIDEgNiwtNiA2LDYgMCAwIDEgNiw2IHoiCiAgICAgICAgIHNvZGlwb2RpOnJ5PSI2IgogICAgICAgICBzb2RpcG9kaTpyeD0iNiIKICAgICAgICAgc29kaXBvZGk6Y3k9IjQ0IgogICAgICAgICBzb2RpcG9kaTpjeD0iNyIKICAgICAgICAgaWQ9InBhdGgzMDM3IgogICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50Mzg4NSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMzMDJiMDA7c3Ryb2tlLXdpZHRoOjEuNTAwMDAwMDAwMDAwMDAwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MCIKICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDM4NjQtNCIKICAgICAgICAgZD0ibSAxMy4wMDUxMDIsNDguMDIyMTA5IDEuMzI5OTMyLC02Ljc0MDM2MiIKICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjY2NjY2NjYyIKICAgICAgICAgaWQ9InBhdGgzNzcwLTEiCiAgICAgICAgIGQ9Im0gMjcuNjM0MzU1LDI1LjEwNDg3NCAyLjY1OTg2NSwyLjY5NjE0NiAtMTQuNjI5MjU0LDE0LjgyODggLTIuNjU0NzYxLDAuNzYyNDcxIGMgMCw0LjA0NDIxOSAtMC42NzAwNjgsMy45NTU3ODIgLTEuMzM1MDM1LDUuOTc3ODkyIGwgLTAuNjY0OTY1LDIuMDIyMTA4IDEuOTk0ODk3LC0wLjY3NDAzNSBDIDE1LDUwLjA0NDIxOSAxNi4wMjA0MDgsNDguMzkyMjkxIDIwLjAxMDIwNSw0OC4zOTIyOTEgbCAtMC4zNTU0NDIsLTEuNzE4MjU0IDE0LjYyOTI1MiwtMTQuODI4Nzk5IDIuNjU5ODY1LDIuNjk2MTQ2IGMgMCwtNC4wNDQyMTkgMC42NjQ5NjUsLTcuNDE0NCAxLjMyOTkzMiwtOS40MzY1MSBsIDAuNjY0OTY1LC0yLjAyMjEwOCAtMS45OTQ4OTcsMC42NzQwMzUgYyAtMS45OTQ4OTksMC42NzQwMzcgLTUuMzE5NzI4LDEuMzQ4MDczIC05LjMwOTUyNSwxLjM0ODA3MyB6IgogICAgICAgICBzdHlsZT0iZm9udC1zaXplOm1lZGl1bTtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO3RleHQtaW5kZW50OjA7dGV4dC1hbGlnbjpzdGFydDt0ZXh0LWRlY29yYXRpb246bm9uZTtsaW5lLWhlaWdodDpub3JtYWw7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10Yjt0ZXh0LWFuY2hvcjpzdGFydDtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDM4ODcpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgzODY0IgogICAgICAgICBkPSJtIDM1LjYxMzk0NywyNS4xMDQ4NzQgLTUuNjAzNzQyLDEuMjg3NDE3IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmNlOTRmO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoMzg2NiIKICAgICAgICAgZD0iTSAzNi45NDM4OCwyMy43NTY4MDEgMTEuMDI5OTAxLDQ5Ljk3MjQzNCIKICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZjZTk0ZjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgzODY4IgogICAgICAgICBkPSJtIDMxLjAxMDIwNSwyNy4zOTIyOTEgMi42MDg4NDQsLTAuMjY1MzA3IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmNlOTRmO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoMzg2OC04IgogICAgICAgICBkPSJNIDE1LjY2NDk2Niw0Mi42Mjk4MiAxNSw0NiIKICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjY2NjY2NjYyIKICAgICAgICAgaWQ9InBhdGgzNzcwLTkiCiAgICAgICAgIGQ9Im0gMjcuODY3MzQ5LDI0LjUzNTE0NyAyLjg1NzE0NCwyLjg1NzE0NCAtMTUuNzE0Mjg5LDE1LjcxNDI4NyAxMGUtNywwLjI4NTcxMyBjIDAsNC4yODU3MTYgLTMuNTcxNDI4LDQuNzE0Mjg2IC00LjI4NTcxNSw2Ljg1NzE0NCBsIDIuMjg1NzE1LDAuMTQyODU2IC0wLjg1NzE0MywxLjI4NTcxNiBjIDIuMTQyODU3LC0wLjcxNDI4NyAxLjU3MTQyNywtNC4yODU3MTYgNS44NTcxNDMsLTQuMjg1NzE2IGwgMS4yODU3MTUsMCAxNS43MTQyODYsLTE1LjcxNDI4NiAyLjg1NzE0NCwyLjg1NzE0NCBjIDAsLTQuMjg1NzE2IDAuNzE0Mjg1LC03Ljg1NzE0NCAxLjQyODU3MSwtMTAuMDAwMDAyIGwgMC43MTQyODUsLTIuMTQyODU2IC0yLjE0Mjg1NiwwLjcxNDI4NCBjIC0yLjE0Mjg1OCwwLjcxNDI4NyAtNS43MTQyODYsMS40Mjg1NzIgLTEwLjAwMDAwMSwxLjQyODU3MiB6IgogICAgICAgICBzdHlsZT0iZm9udC1zaXplOm1lZGl1bTtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO3RleHQtaW5kZW50OjA7dGV4dC1hbGlnbjpzdGFydDt0ZXh0LWRlY29yYXRpb246bm9uZTtsaW5lLWhlaWdodDpub3JtYWw7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10Yjt0ZXh0LWFuY2hvcjpzdGFydDtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTtjb2xvcjojMDAwMDAwO2ZpbGw6bm9uZTtzdHJva2U6IzMwMmIwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZTtmb250LWZhbWlseTpzYW5zLXNlcmlmIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8cGF0aAogICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LjAxMDIwNSwzLjM5MjI5MSkiCiAgICAgICAgIGQ9Im0gMTMsNDQgYSA2LDYgMCAwIDEgLTYsNiA2LDYgMCAwIDEgLTYsLTYgNiw2IDAgMCAxIDYsLTYgNiw2IDAgMCAxIDYsNiB6IgogICAgICAgICBzb2RpcG9kaTpyeT0iNiIKICAgICAgICAgc29kaXBvZGk6cng9IjYiCiAgICAgICAgIHNvZGlwb2RpOmN5PSI0NCIKICAgICAgICAgc29kaXBvZGk6Y3g9IjciCiAgICAgICAgIGlkPSJwYXRoMzAzNy04IgogICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50Mzg4OSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNmY2U5NGY7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5NjQwMDAwMDAwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MCIKICAgICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIiAvPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==
"""
Dim_Length_b64=\
"""
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjY0cHgiCiAgIGhlaWdodD0iNjRweCIKICAgaWQ9InN2ZzU4MjEiCiAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMCByMTUyOTkiCiAgIHNvZGlwb2RpOmRvY25hbWU9IkRpbWVuc2lvbl9MZW5ndGguc3ZnIgogICBpbmtzY2FwZTpvdXRwdXRfZXh0ZW5zaW9uPSJvcmcuaW5rc2NhcGUub3V0cHV0LnN2Zy5pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTpleHBvcnQtZmlsZW5hbWU9Ii9ob21lL3VzZXIvRG93bmxvYWRzL2NhZC9teXN0dWZmL2ljb25zL0RyYXdpbmcvVGVjaERyYXdfRGltZW5zaW9uX0xlbmd0aF8yXzMycHgucG5nIgogICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNDUiCiAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI0NSI+CiAgPGRlZnMKICAgICBpZD0iZGVmczU4MjMiPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMDI2IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzMDI4IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjNGEwMDA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzAzMCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmNlOTRmO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzAyMCIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzAyMiIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYzRhMDAwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDMwMjQiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZjZTk0ZjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMwMTQiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDMwMTYiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M0YTAwMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzMDE4IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmY2U5NGY7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ2MzQ5Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMDAwMDtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3A2MzUxIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eTowOyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDYzNTMiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMzc3Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzAwMTlhMztzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AzMzc5IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDA2OWZmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDMzODEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMzc3IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzM4MyIKICAgICAgIHgxPSI5MDEuMTg3NSIKICAgICAgIHkxPSIxMTkwLjg3NSIKICAgICAgIHgyPSIxMjY3LjkwNjIiCiAgICAgICB5Mj0iMTE5MC44NzUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTEsMCwwLDEsMjE5OS4zNTYsMCkiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iNjQgOiAzMiA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzIgOiAyMS4zMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlNTgyOSIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50NjM0OSIKICAgICAgIGlkPSJyYWRpYWxHcmFkaWVudDYzNTUiCiAgICAgICBjeD0iMTEwMy42Mzk5IgogICAgICAgY3k9IjE0MjQuNDQ2NSIKICAgICAgIGZ4PSIxMTAzLjYzOTkiCiAgICAgICBmeT0iMTQyNC40NDY1IgogICAgICAgcj0iMTk0LjQwNjE0IgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMS40MzA3NDk5LC0xLjM2MDUxNTZlLTcsLTEuMjAyNzEzZS04LDAuMTI2NDgwMSwyNjc0Ljc0ODgsMTI0NC4yODI2KSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzODkzIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzg5OSIKICAgICAgIHgxPSIzNSIKICAgICAgIHkxPSI1MCIKICAgICAgIHgyPSIzMSIKICAgICAgIHkyPSIxNiIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzODkzIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2QzZDdjZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDM4OTUiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmZmZmZmY7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AzODk3IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwzNC43NTczNTksLTkuOTcwNTYzKSIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMwMTQiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzOTA3IgogICAgICAgeDE9IjM5Ljk0OTc0OSIKICAgICAgIHkxPSIxMC4zOTMzOTgiCiAgICAgICB4Mj0iMjEuNTY0OTcyIgogICAgICAgeTI9IjQuNzM2NTQ0MSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNjY0OTY2MDQsMC42NzQwMzYzMiwtMC42NjQ5NjYwNCwwLjY3NDAzNjMyLDMxLjk2NDI4NSwtMTEuMjkzMDg3KSIKICAgICAgIHkyPSIyOC4zOTkxODUiCiAgICAgICB4Mj0iMjUuNDQ1MjIzIgogICAgICAgeTE9IjQwLjIyNzUwOSIKICAgICAgIHgxPSI0My4yODg4OTEiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDQwNzUiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMDIwIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNzA3MTA2NzgsMC43MDcxMDY3OCwtMC43MDcxMDY3OCwwLjcwNzEwNjc4LDM0LjcwNDEyNywtOS45NDI2Nzk2KSIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM4OTMtNCIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM5MDctNyIKICAgICAgIHgxPSIzOS45NDk3NDkiCiAgICAgICB5MT0iMTAuMzkzMzk4IgogICAgICAgeDI9IjIxLjU2NDk3MiIKICAgICAgIHkyPSI0LjczNjU0NDEiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzg5My00Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2QzZDdjZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDM4OTUtMCIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDM4OTctOSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIHkyPSI0LjczNjU0NDEiCiAgICAgICB4Mj0iMjEuNTY0OTcyIgogICAgICAgeTE9IjEwLjM5MzM5OCIKICAgICAgIHgxPSIzOS45NDk3NDkiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNzA3MTA2NzgsMC43MDcxMDY3OCwtMC43MDcxMDY3OCwwLjcwNzEwNjc4LC0xLjI0MjY0MSwyNi4wMjk0MzcpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMDY1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzAyNiIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjkuNjg3NSIKICAgICBpbmtzY2FwZTpjeD0iMzIiCiAgICAgaW5rc2NhcGU6Y3k9IjMyIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0idHJ1ZSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTUzNiIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MDEiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIHNob3dndWlkZXM9InRydWUiCiAgICAgaW5rc2NhcGU6Z3VpZGUtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpzbmFwLWdsb2JhbD0idHJ1ZSIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiCiAgICAgaW5rc2NhcGU6c25hcC1ub2Rlcz0iZmFsc2UiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIHR5cGU9Inh5Z3JpZCIKICAgICAgIGlkPSJncmlkMjk5NCIKICAgICAgIGVtcHNwYWNpbmc9IjIiCiAgICAgICB2aXNpYmxlPSJ0cnVlIgogICAgICAgZW5hYmxlZD0idHJ1ZSIKICAgICAgIHNuYXB2aXNpYmxlZ3JpZGxpbmVzb25seT0idHJ1ZSIgLz4KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE1ODI2Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICAgIDxkYzpjcmVhdG9yPgogICAgICAgICAgPGNjOkFnZW50PgogICAgICAgICAgICA8ZGM6dGl0bGU+W1dhbmRlcmVyRmFuXTwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6Y3JlYXRvcj4KICAgICAgICA8ZGM6dGl0bGU+VGVjaERyYXdfRGltZW5zaW9uX0xlbmd0aDwvZGM6dGl0bGU+CiAgICAgICAgPGRjOmRhdGU+MjAxNi0wNC0yNzwvZGM6ZGF0ZT4KICAgICAgICA8ZGM6cmVsYXRpb24+aHR0cDovL3d3dy5mcmVlY2Fkd2ViLm9yZy93aWtpL2luZGV4LnBocD90aXRsZT1BcnR3b3JrPC9kYzpyZWxhdGlvbj4KICAgICAgICA8ZGM6cHVibGlzaGVyPgogICAgICAgICAgPGNjOkFnZW50PgogICAgICAgICAgICA8ZGM6dGl0bGU+RnJlZUNBRDwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6cHVibGlzaGVyPgogICAgICAgIDxkYzppZGVudGlmaWVyPkZyZWVDQUQvc3JjL01vZC9UZWNoRHJhdy9HdWkvUmVzb3VyY2VzL2ljb25zL1RlY2hEcmF3X0RpbWVuc2lvbl9MZW5ndGguc3ZnPC9kYzppZGVudGlmaWVyPgogICAgICAgIDxkYzpyaWdodHM+CiAgICAgICAgICA8Y2M6QWdlbnQ+CiAgICAgICAgICAgIDxkYzp0aXRsZT5GcmVlQ0FEIExHUEwyKzwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6cmlnaHRzPgogICAgICAgIDxjYzpsaWNlbnNlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwtMy4wLmVuLmh0bWwiPmh0dHBzOi8vd3d3LmdudS5vcmcvY29weWxlZnQvbGVzc2VyLmh0bWw8L2NjOmxpY2Vuc2U+CiAgICAgICAgPGRjOmNvbnRyaWJ1dG9yPgogICAgICAgICAgPGNjOkFnZW50PgogICAgICAgICAgICA8ZGM6dGl0bGU+W2Fncnlzb25dIEFsZXhhbmRlciBHcnlzb248L2RjOnRpdGxlPgogICAgICAgICAgPC9jYzpBZ2VudD4KICAgICAgICA8L2RjOmNvbnRyaWJ1dG9yPgogICAgICAgIDxkYzpzdWJqZWN0PgogICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgIDxyZGY6bGk+ZG91YmxlIGFycm93PC9yZGY6bGk+CiAgICAgICAgICAgIDxyZGY6bGk+ZGlhZ29uYWw8L3JkZjpsaT4KICAgICAgICAgICAgPHJkZjpsaT5hcnJvdzwvcmRmOmxpPgogICAgICAgICAgPC9yZGY6QmFnPgogICAgICAgIDwvZGM6c3ViamVjdD4KICAgICAgICA8ZGM6ZGVzY3JpcHRpb24+RG91YmxlIGFycm93IGF0IGFuZ2xlIGJldHdlZW4gdHdvIGRpYWdvbmFsIGJhcnM8L2RjOmRlc2NyaXB0aW9uPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlkPSJsYXllcjEiCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciI+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6bWVkaXVtO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7dGV4dC1pbmRlbnQ6MDt0ZXh0LWFsaWduOnN0YXJ0O3RleHQtZGVjb3JhdGlvbjpub25lO2xpbmUtaGVpZ2h0Om5vcm1hbDtsZXR0ZXItc3BhY2luZzpub3JtYWw7d29yZC1zcGFjaW5nOm5vcm1hbDt0ZXh0LXRyYW5zZm9ybTpub25lO2RpcmVjdGlvbjpsdHI7YmxvY2stcHJvZ3Jlc3Npb246dGI7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O2Jhc2VsaW5lLXNoaWZ0OmJhc2VsaW5lO2NvbG9yOiMwMDAwMDA7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50NDA3NSk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZiIKICAgICAgIGQ9Im0gMzQuNjI0MTUsMTkuNzEyNTgzIDIuNjU5ODY1LDIuNjk2MTQ2IC0xNC42MjkyNTQsMTQuODI4OCAtMi42NTk4NjQsLTIuNjk2MTQ3IGMgMCw0LjA0NDIxOSAtMC42NjQ5NjUsNy40MTQ0IC0xLjMyOTkzMiw5LjQzNjUxIEwgMTgsNDYgMTkuOTk0ODk3LDQ1LjMyNTk2NSBjIDEuOTk0ODk4LC0wLjY3NDAzNyA1LjMxOTcyOCwtMS4zNDgwNzMgOS4zMDk1MjUsLTEuMzQ4MDczIGwgLTIuNjU5ODY0LC0yLjY5NjE0NiAxNC42MjkyNTIsLTE0LjgyODc5OSAyLjY1OTg2NSwyLjY5NjE0NiBjIDAsLTQuMDQ0MjE5IDAuNjY0OTY1LC03LjQxNDQgMS4zMjk5MzIsLTkuNDM2NTEgbCAwLjY2NDk2NSwtMi4wMjIxMDggLTEuOTk0ODk3LDAuNjc0MDM1IGMgLTEuOTk0ODk5LDAuNjc0MDM3IC01LjMxOTcyOCwxLjM0ODA3MyAtOS4zMDk1MjUsMS4zNDgwNzMgeiIKICAgICAgIGlkPSJwYXRoMzc3MC0xIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjY2NjY2MiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTEuMjAwMDY5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjUxLjIwMDA2OSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZm9udC1zaXplOm1lZGl1bTtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO3RleHQtaW5kZW50OjA7dGV4dC1hbGlnbjpzdGFydDt0ZXh0LWRlY29yYXRpb246bm9uZTtsaW5lLWhlaWdodDpub3JtYWw7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10Yjt0ZXh0LWFuY2hvcjpzdGFydDtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDM5MDcpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojMzAyYjAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWYiCiAgICAgICBkPSJtIDQzLDMgLTQsNCAxOCwxOCA0LC00IHoiCiAgICAgICBpZD0icGF0aDM3ODEtMSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUxLjIwMDA2OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1MS4yMDAwNjkiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZjZTk0ZjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSA0Mi4zNDQxNDMsNS4yMDA3NTAyIDU4Ljg1NjYwNywyMS42ODQ1MzUiCiAgICAgICBpZD0icGF0aDMwMTQiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1MS4yMDAwNjkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTEuMjAwMDY5IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmY2U5NGY7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gNDIuNjAzNzQyLDE5LjcxMjU4MyAtNi42NDk2NTksMS4zNDgwNzQiCiAgICAgICBpZD0icGF0aDM4NjQiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1MS4yMDAwNjkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTEuMjAwMDY5IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmY2U5NGY7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMTkuOTk0ODk3LDQyLjYyOTgxOCAxLjMyOTkzMiwtNi43NDAzNjIiCiAgICAgICBpZD0icGF0aDM4NjQtNCIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUxLjIwMDA2OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1MS4yMDAwNjkiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZjZTk0ZjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNDMuOTMzNjc1LDE4LjM2NDUxIDE4LjAxOTY5Niw0NC41ODAxNDMiCiAgICAgICBpZD0icGF0aDM4NjYiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1MS4yMDAwNjkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTEuMjAwMDY5IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmY2U5NGY7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gMzcuMjg0MDE1LDIyLjQwODcyOSAzLjMyNDgyOSwtMC42NzQwMzYiCiAgICAgICBpZD0icGF0aDM4NjgiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUxLjIwMDA2OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1MS4yMDAwNjkiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZjZTk0ZjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSAyMi42NTQ3NjEsMzcuMjM3NTI5IC0wLjY2NDk2NiwzLjM3MDE4IgogICAgICAgaWQ9InBhdGgzODY4LTgiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUxLjIwMDA2OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1MS4yMDAwNjkiIC8+CiAgICA8cGF0aAogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHN0eWxlPSJmb250LXNpemU6bWVkaXVtO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7dGV4dC1pbmRlbnQ6MDt0ZXh0LWFsaWduOnN0YXJ0O3RleHQtZGVjb3JhdGlvbjpub25lO2xpbmUtaGVpZ2h0Om5vcm1hbDtsZXR0ZXItc3BhY2luZzpub3JtYWw7d29yZC1zcGFjaW5nOm5vcm1hbDt0ZXh0LXRyYW5zZm9ybTpub25lO2RpcmVjdGlvbjpsdHI7YmxvY2stcHJvZ3Jlc3Npb246dGI7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O2Jhc2VsaW5lLXNoaWZ0OmJhc2VsaW5lO2NvbG9yOiMwMDAwMDA7ZmlsbDpub25lO3N0cm9rZTojMzAyYjAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWYiCiAgICAgICBkPSJNIDM0Ljg1NzE0NCwxOS4xNDI4NTYgMzcuNzE0Mjg4LDIyIDIxLjk5OTk5OSwzNy43MTQyODcgMTkuMTQyODU3LDM0Ljg1NzE0MiBjIDAsNC4yODU3MTYgLTAuNzE0Mjg1LDcuODU3MTQ0IC0xLjQyODU3MiwxMC4wMDAwMDIgTCAxNyw0NyAxOS4xNDI4NTcsNDYuMjg1NzE2IGMgMi4xNDI4NTcsLTAuNzE0Mjg3IDUuNzE0Mjg1LC0xLjQyODU3MiAxMC4wMDAwMDEsLTEuNDI4NTcyIEwgMjYuMjg1NzE1LDQyIDQyLjAwMDAwMSwyNi4yODU3MTQgbCAyLjg1NzE0NCwyLjg1NzE0NCBjIDAsLTQuMjg1NzE2IDAuNzE0Mjg1LC03Ljg1NzE0NCAxLjQyODU3MSwtMTAuMDAwMDAyIEwgNDcuMDAwMDAxLDE3IDQ0Ljg1NzE0NSwxNy43MTQyODQgYyAtMi4xNDI4NTgsMC43MTQyODcgLTUuNzE0Mjg2LDEuNDI4NTcyIC0xMC4wMDAwMDEsMS40Mjg1NzIgeiIKICAgICAgIGlkPSJwYXRoMzc3MC05IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjY2NjY2MiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTEuMjAwMDY5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjUxLjIwMDA2OSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZm9udC1zaXplOm1lZGl1bTtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO3RleHQtaW5kZW50OjA7dGV4dC1hbGlnbjpzdGFydDt0ZXh0LWRlY29yYXRpb246bm9uZTtsaW5lLWhlaWdodDpub3JtYWw7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10Yjt0ZXh0LWFuY2hvcjpzdGFydDtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTtjb2xvcjojMDAwMDAwO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDMwNjUpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojMzAyYjAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWYiCiAgICAgICBkPSJtIDcsMzkgLTQsNCAxOCwxOCA0LC00IHoiCiAgICAgICBpZD0icGF0aDM3ODEtMS00IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTEuMjAwMDY5IgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjUxLjIwMDA2OSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmNlOTRmO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDYuMzQ0MTQzLDQxLjIwMDc1IDIyLjg1NjYwNyw1Ny42ODQ1MzUiCiAgICAgICBpZD0icGF0aDMwMTQtOCIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUxLjIwMDA2OSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1MS4yMDAwNjkiIC8+CiAgPC9nPgo8L3N2Zz4K
"""
Dim_Angle_b64=\
"""
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjY0cHgiCiAgIGhlaWdodD0iNjRweCIKICAgaWQ9InN2ZzU4MjEiCiAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMCByMTUyOTkiCiAgIHNvZGlwb2RpOmRvY25hbWU9IkRpbWVuc2lvbl9BbmdsZS5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIgogICB2ZXJzaW9uPSIxLjEiCiAgIGlua3NjYXBlOmV4cG9ydC1maWxlbmFtZT0iL21lZGlhL2RhdGEvWW9yaWsvRnJlZUNBRC9pY29ucy9Ta2V0Y2hlci5wbmciCiAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI0NSIKICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjQ1Ij4KICA8ZGVmcwogICAgIGlkPSJkZWZzNTgyMyI+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMwNDIiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDMwNDQiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M0YTAwMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzMDQ2IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmY2U5NGY7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMDM2IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzMDM4IgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjNGEwMDA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzA0MCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmNlOTRmO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzAzMCIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzAzMiIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYzRhMDAwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDMwMzQiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZjZTk0ZjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMwMjQiCiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDMwMjYiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M0YTAwMDtzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzMDI4IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNmY2U5NGY7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzOTI5IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzOTMxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNjNGEwMDA7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzkzMyIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmNlOTRmO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzkwNSI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiNkM2Q3Y2Y7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AzOTA3IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMzkwOSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDYzNDkiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAwMDAwO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDYzNTEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDAwMDA7c3RvcC1vcGFjaXR5OjA7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wNjM1MyIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDMzNzciPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMDAxOWEzO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDMzNzkiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDY5ZmY7c3RvcC1vcGFjaXR5OjE7IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMzM4MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMzNzciCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMzgzIgogICAgICAgeDE9IjkwMS4xODc1IgogICAgICAgeTE9IjExOTAuODc1IgogICAgICAgeDI9IjEyNjcuOTA2MiIKICAgICAgIHkyPSIxMTkwLjg3NSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMSwwLDAsMSwyMTk5LjM1NiwwKSIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAzMiA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI2NCA6IDMyIDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzMiA6IDIxLjMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmU1ODI5IiAvPgogICAgPHJhZGlhbEdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQ2MzQ5IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50NjM1NSIKICAgICAgIGN4PSIxMTAzLjYzOTkiCiAgICAgICBjeT0iMTQyNC40NDY1IgogICAgICAgZng9IjExMDMuNjM5OSIKICAgICAgIGZ5PSIxNDI0LjQ0NjUiCiAgICAgICByPSIxOTQuNDA2MTQiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0xLjQzMDc0OTksLTEuMzYwNTE1NmUtNywtMS4yMDI3MTNlLTgsMC4xMjY0ODAxLDI2NzQuNzQ4OCwxMjQ0LjI4MjYpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM4OTMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzODk5IgogICAgICAgeDE9IjM1IgogICAgICAgeTE9IjUwIgogICAgICAgeDI9IjMxIgogICAgICAgeTI9IjE2IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM4OTMiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZDNkN2NmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMzg5NSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDM4OTciIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMDI0IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzAzMyIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjk2MjE0ODgsLTAuMjcyNTI0NjUsMC4yNzI1MjQ2NSwwLjk2MjE0ODgsNDguNjQ0MjgxLDE5LjQ0MzgwMikiCiAgICAgICB4MT0iMzQuMDkzNTg2IgogICAgICAgeTE9IjQ5LjcyOTg3NyIKICAgICAgIHgyPSIzMy44OTE2OTciCiAgICAgICB5Mj0iMTYuMTAzNjk3IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzOTA1IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzkxMSIKICAgICAgIHgxPSI4LjUiCiAgICAgICB5MT0iNDguNSIKICAgICAgIHgyPSI1LjUiCiAgICAgICB5Mj0iMzkuNSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMDM2IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzkxOSIKICAgICAgIHgxPSI5IgogICAgICAgeTE9IjUwIgogICAgICAgeDI9IjUiCiAgICAgICB5Mj0iMzgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzkyOSIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM5MjciCiAgICAgICB4MT0iMTkiCiAgICAgICB5MT0iMzkiCiAgICAgICB4Mj0iMjgiCiAgICAgICB5Mj0iOSIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzMDQyIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzk0MSIKICAgICAgIHgxPSIxOSIKICAgICAgIHkxPSIzOSIKICAgICAgIHgyPSIyOCIKICAgICAgIHkyPSI5IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDMwMzAiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzOTQ5IgogICAgICAgeDE9IjI2IgogICAgICAgeTE9IjUzIgogICAgICAgeDI9IjIyIgogICAgICAgeTI9IjQwIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI5LjY4NzUiCiAgICAgaW5rc2NhcGU6Y3g9IjMyIgogICAgIGlua3NjYXBlOmN5PSIzMiIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE1MzYiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODAxIgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBzaG93Z3VpZGVzPSJ0cnVlIgogICAgIGlua3NjYXBlOmd1aWRlLWJib3g9InRydWUiCiAgICAgaW5rc2NhcGU6c25hcC1nbG9iYWw9InRydWUiCiAgICAgaW5rc2NhcGU6c25hcC1iYm94PSJ0cnVlIj4KICAgIDxpbmtzY2FwZTpncmlkCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBpZD0iZ3JpZDI5OTMiCiAgICAgICBlbXBzcGFjaW5nPSIyIgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiCiAgICAgICBzbmFwdmlzaWJsZWdyaWRsaW5lc29ubHk9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNTgyNiI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgIDxjYzpBZ2VudD4KICAgICAgICAgICAgPGRjOnRpdGxlPltXYW5kZXJlckZhbl08L2RjOnRpdGxlPgogICAgICAgICAgPC9jYzpBZ2VudD4KICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgICAgPGRjOnRpdGxlPlRlY2hEcmF3X0RpbWVuc2lvbl9BbmdsZTwvZGM6dGl0bGU+CiAgICAgICAgPGRjOmRhdGU+MjAxNi0wNC0yNzwvZGM6ZGF0ZT4KICAgICAgICA8ZGM6cmVsYXRpb24+aHR0cDovL3d3dy5mcmVlY2Fkd2ViLm9yZy93aWtpL2luZGV4LnBocD90aXRsZT1BcnR3b3JrPC9kYzpyZWxhdGlvbj4KICAgICAgICA8ZGM6cHVibGlzaGVyPgogICAgICAgICAgPGNjOkFnZW50PgogICAgICAgICAgICA8ZGM6dGl0bGU+RnJlZUNBRDwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6cHVibGlzaGVyPgogICAgICAgIDxkYzppZGVudGlmaWVyPkZyZWVDQUQvc3JjL01vZC9UZWNoRHJhdy9HdWkvUmVzb3VyY2VzL2ljb25zL1RlY2hEcmF3X0RpbWVuc2lvbl9BbmdsZS5zdmc8L2RjOmlkZW50aWZpZXI+CiAgICAgICAgPGRjOnJpZ2h0cz4KICAgICAgICAgIDxjYzpBZ2VudD4KICAgICAgICAgICAgPGRjOnRpdGxlPkZyZWVDQUQgTEdQTDIrPC9kYzp0aXRsZT4KICAgICAgICAgIDwvY2M6QWdlbnQ+CiAgICAgICAgPC9kYzpyaWdodHM+CiAgICAgICAgPGNjOmxpY2Vuc2UKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGdwbC0zLjAuZW4uaHRtbCI+aHR0cHM6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9sZXNzZXIuaHRtbDwvY2M6bGljZW5zZT4KICAgICAgICA8ZGM6Y29udHJpYnV0b3I+CiAgICAgICAgICA8Y2M6QWdlbnQ+CiAgICAgICAgICAgIDxkYzp0aXRsZT5bYWdyeXNvbl0gQWxleGFuZGVyIEdyeXNvbjwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6Y29udHJpYnV0b3I+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaWQ9ImxheWVyMSIKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIj4KICAgIDxnCiAgICAgICBpZD0iZzMwMjQiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjA2OTg2MTMsMCwwLDAuOTk0MDQxNjUsLTQ5LjQwMjc1NiwtOC40MzkxNTU5KSIKICAgICAgIHN0eWxlPSJzdHJva2U6IzMwMmIwMCIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI0NSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI0NSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjY2NjIgogICAgICAgICBpZD0icGF0aDM3NzAtMSIKICAgICAgICAgZD0ibSA4NC41MDcwNjEsMzQuNjkwMDY4IDIuMDQ2OTIsLTMuNDM2NTg1IEMgOTIsMzQgOTcsNDMgOTEuODI1MTU1LDUwLjg1MjQ1NyBsIC0zLjYwNzU4NCwtMS43Mjc4MTEgYyAxLjQwOTgyOSw0LjAwMTU0OCAxLjkxNzc2MSw3LjU3MTE0MSAxLjk1NTc1MSw5LjgwNjg4NiBsIDAuMDM3OTksMi4yMzU3NDUgMS43NjU4MDMsLTEuMzcxODM5IGMgMS43NjU4MDIsLTEuMzcxODM4IDQuODY1NDU0LC0zLjIxMzYyMSA4Ljg2Njk5NSwtNC42MjM0NSBMIDk3LjIzNjUzMSw1My40NDQxNzYgQyAxMDUsNDYgOTgsMzAgODkuNjI0MzU4LDI2LjA5ODYwNCBsIDIuMDQ2OTE5LC0zLjQzNjU4NiBjIC00LjExMjYyOCwxLjA0MjI0OSAtNy43MTM1MjcsMS4yMjUzNTQgLTkuOTQzNTUsMS4wNjEwNDEgbCAtMi4yMzAwMjMsLTAuMTY0MzE0IDEuMjA2NTYzLDEuODgyNjA3IGMgMS4yMDY1NjQsMS44ODI2MDUgMi43NjA1NDQsNS4xMzYwODggMy44MDI3OTQsOS4yNDg3MTYgeiIKICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZTptZWRpdW07Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bGluZS1oZWlnaHQ6bm9ybWFsO2xldHRlci1zcGFjaW5nOm5vcm1hbDt3b3JkLXNwYWNpbmc6bm9ybWFsO3RleHQtdHJhbnNmb3JtOm5vbmU7ZGlyZWN0aW9uOmx0cjtibG9jay1wcm9ncmVzc2lvbjp0Yjt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7YmFzZWxpbmUtc2hpZnQ6YmFzZWxpbmU7Y29sb3I6IzAwMDAwMDtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQzMDMzKTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6IzMwMmIwMDtzdHJva2Utd2lkdGg6MS45MzkzODQ3MDAwMDAwMDAwMDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7dmlzaWJpbGl0eTp2aXNpYmxlO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZTtmb250LWZhbWlseTpzYW5zLXNlcmlmIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDM4NjQiCiAgICAgICAgIGQ9Im0gODIuNDIyNTYsMjYuNDY0ODExIDMuMTA3OTYsNi41MDY5NjUiCiAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmY2U5NGY7c3Ryb2tlLXdpZHRoOjEuOTM5Mzg0NzAwMDAwMDAwMDA7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgzODY0LTQiCiAgICAgICAgIGQ9Ik0gOTEuMjI4NjYxLDU2LjA0OTU0NSA5MC43NDQ2NDIsNTAuMzIyOTI5IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmNlOTRmO3N0cm9rZS13aWR0aDoxLjkzOTM4NDcwMDAwMDAwMDAwO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoMzg2NiIKICAgICAgICAgZD0iTSA4Mi4xMjE2NzMsMjYuNjA4MzY1IEMgMTAwLDM1IDk3LjUxMzMwOCw0OCA5MS45MzYzMjUsNTMuMTQ4ODU2IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmNlOTRmO3N0cm9rZS13aWR0aDoxLjkzOTM4NDcwMDAwMDAwMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAvPgogICAgICA8cGF0aAogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBpZD0icGF0aDM4NjgiCiAgICAgICAgIGQ9Ik0gODYuNTUzOTgsMzEuMjUzNDgzIDg1LDI4IgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmNlOTRmO3N0cm9rZS13aWR0aDoxLjkzOTM4NDcwMDAwMDAwMDAwO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIGlkPSJwYXRoMzg2OC04IgogICAgICAgICBkPSJNIDk0LjYyNjQzMSw0OS41NDExNDIgOTAuMTY2OTE2LDU4LjkzNzIxIgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmNlOTRmO3N0cm9rZS13aWR0aDoxLjkzOTM4NDcwMDAwMDAwMDAwO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjY2NjIgogICAgICAgICBpZD0icGF0aDM3NzAtOSIKICAgICAgICAgZD0ibSA4NC41MDcwNjEsMzQuNjkwMDY4IDIuMDQ2OTIsLTMuNDM2NTg1IEMgOTIsMzQgOTcsNDMgOTEuODI1MTU1LDUwLjg1MjQ1NyBsIC0zLjYwNzU4NCwtMS43Mjc4MTEgYyAxLjQwOTgyOSw0LjAwMTU0OCAxLjkxNzc2MSw3LjU3MTE0MSAxLjk1NTc1MSw5LjgwNjg4NiBsIDAuMDM3OTksMi4yMzU3NDUgMS43NjU4MDMsLTEuMzcxODM5IGMgMS43NjU4MDIsLTEuMzcxODM4IDQuODY1NDU0LC0zLjIxMzYyMSA4Ljg2Njk5NSwtNC42MjM0NSBMIDk3LjIzNjUzMSw1My40NDQxNzYgQyAxMDUsNDYgOTgsMzAgODkuNjI0MzU4LDI2LjA5ODYwNCBsIDIuMDQ2OTE5LC0zLjQzNjU4NiBjIC00LjExMjYyOCwxLjA0MjI0OSAtNy43MTM1MjcsMS4yMjUzNTQgLTkuOTQzNTUsMS4wNjEwNDEgbCAtMi4yMzAwMjMsLTAuMTY0MzE0IDEuMjA2NTYzLDEuODgyNjA3IGMgMS4yMDY1NjQsMS44ODI2MDUgMi43NjA1NDQsNS4xMzYwODggMy44MDI3OTQsOS4yNDg3MTYgeiIKICAgICAgICAgc3R5bGU9ImZvbnQtc2l6ZTptZWRpdW07Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bGluZS1oZWlnaHQ6bm9ybWFsO2xldHRlci1zcGFjaW5nOm5vcm1hbDt3b3JkLXNwYWNpbmc6bm9ybWFsO3RleHQtdHJhbnNmb3JtOm5vbmU7ZGlyZWN0aW9uOmx0cjtibG9jay1wcm9ncmVzc2lvbjp0Yjt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7YmFzZWxpbmUtc2hpZnQ6YmFzZWxpbmU7Y29sb3I6IzAwMDAwMDtmaWxsOm5vbmU7c3Ryb2tlOiMzMDJiMDA7c3Ryb2tlLXdpZHRoOjEuOTM5Mzg0NzAwMDAwMDAwMDA7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGU7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZiIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICAgIDwvZz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMzAyYjAwO3N0cm9rZS13aWR0aDo4O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSA5LDQ0IDQ4Ljk1OTg0Myw1OC4xMTQyMTEiCiAgICAgICBpZD0icGF0aDMwMzktNyIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSItMTkuOTc5OTIxIgogICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci15PSI3LjA1NzEwNTUiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNDUiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNDUiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzMwMmIwMDtzdHJva2Utd2lkdGg6ODtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gOSw0NCAzMy40NjU2NzksOS4zOTYwODk1IgogICAgICAgaWQ9InBhdGgzMDM5LTctNCIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSItMTIuMjMyODQiCiAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii0xNy4zMDE5NTUiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNDUiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNDUiIC8+CiAgICA8cGF0aAogICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIgogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDM5MTEpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMzAyYjAwO3N0cm9rZS13aWR0aDoxLjUwMDAwMDAwMDAwMDAwMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjAiCiAgICAgICBpZD0icGF0aDMwMzciCiAgICAgICBzb2RpcG9kaTpjeD0iNyIKICAgICAgIHNvZGlwb2RpOmN5PSI0NCIKICAgICAgIHNvZGlwb2RpOnJ4PSI2IgogICAgICAgc29kaXBvZGk6cnk9IjYiCiAgICAgICBkPSJNIDEzLDQ0IEEgNiw2IDAgMSAxIDEsNDQgNiw2IDAgMSAxIDEzLDQ0IHoiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjMzMzMzMzMsMCwwLDEuMzMzMzMzMSwxLjY2NjY2NjksLTE0LjY2NjY1NSkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNDUiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNDUiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6dXJsKCNsaW5lYXJHcmFkaWVudDM5NDkpO3N0cm9rZS13aWR0aDo0O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSA5LDQ0IDQ4Ljk1OTg0Myw1OC4xMTQyMTEiCiAgICAgICBpZD0icGF0aDMwMzktNy0wIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9Ii0xOS45Nzk5MjEiCiAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9IjcuMDU3MTA1NSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI0NSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI0NSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50MzkyNyk7c3Ryb2tlOnVybCgjbGluZWFyR3JhZGllbnQzOTQxKTtzdHJva2Utd2lkdGg6NDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MTtmaWxsLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gOSw0NCAzMy40NjU2NzksOS4zOTYwOSIKICAgICAgIGlkPSJwYXRoMzAzOS03LTQtOSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSItMTIuMjMyODQiCiAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii0xNy4zMDE5NTUiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNDUiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNDUiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZjZTk0ZjtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gOSw0MyA0OS40ODcwOTMsNTcuMjc2NDQyIgogICAgICAgaWQ9InBhdGgzMDM5LTctMC00IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9Ii0xOS45Nzk5MjEiCiAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9IjcuMDU3MTA1NSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI0NSIKICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI0NSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmNlOTRmO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAxMCw0MSAzMi43NDE4OTMsOC43MTMyMTQiCiAgICAgICBpZD0icGF0aDMwMzktNy00LTktOCIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSItMTIuMjMyODQiCiAgICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii0xNy4zMDE5NTUiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNDUiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNDUiIC8+CiAgICA8cGF0aAogICAgICAgc29kaXBvZGk6dHlwZT0iYXJjIgogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDM5MTkpO3N0cm9rZTojZmNlOTRmO3N0cm9rZS13aWR0aDoxLjk5OTk5OTY0MDAwMDAwMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICBpZD0icGF0aDMwMzctOCIKICAgICAgIHNvZGlwb2RpOmN4PSI3IgogICAgICAgc29kaXBvZGk6Y3k9IjQ0IgogICAgICAgc29kaXBvZGk6cng9IjYiCiAgICAgICBzb2RpcG9kaTpyeT0iNiIKICAgICAgIGQ9Ik0gMTMsNDQgQSA2LDYgMCAxIDEgMSw0NCA2LDYgMCAxIDEgMTMsNDQgeiIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQsMCkiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNDUiCiAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNDUiIC8+CiAgPC9nPgo8L3N2Zz4K
"""
Dim_Parallel_b64=\
"""
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjY0cHgiCiAgIGhlaWdodD0iNjRweCIKICAgaWQ9InN2ZzI3MjYiCiAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMCByMTUyOTkiCiAgIHNvZGlwb2RpOmRvY25hbWU9IkRpc3RhbmNlX1BhcmFsbGVsLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiCiAgIHZlcnNpb249IjEuMSI+CiAgPGRlZnMKICAgICBpZD0iZGVmczI3MjgiPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzcwIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNzcyIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwNjk4OWE7c3RvcC1vcGFjaXR5OjEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzc3NCIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMzRlMGUyO3N0b3Atb3BhY2l0eToxIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc2MCI+CiAgICAgIDxzdG9wCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwNjk4OWE7c3RvcC1vcGFjaXR5OjEiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AzNzYyIiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojMzRlMGUyO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMzc2NCIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iNjQgOiAzMiA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzIgOiAyMS4zMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjczNCIgLz4KICAgIDxyYWRpYWxHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzE0NC00IgogICAgICAgaWQ9InJhZGlhbEdyYWRpZW50Mzg1MC05IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDAuNjk4NTI5NCwwLDIwMi44Mjg2MykiCiAgICAgICBjeD0iMjI1LjI2NDAyIgogICAgICAgY3k9IjY3Mi43OTczNiIKICAgICAgIGZ4PSIyMjUuMjY0MDIiCiAgICAgICBmeT0iNjcyLjc5NzM2IgogICAgICAgcj0iMzQuMzQ1MTg4IiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzMTQ0LTQiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxOyIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDMxNDYtMiIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZmZmZmZjtzdG9wLW9wYWNpdHk6MDsiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgaWQ9InN0b3AzMTQ4LTAiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzYwIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc2NiIKICAgICAgIHgxPSItNTU2LjAyMzc0IgogICAgICAgeTE9Ii00MTguNDg2NDIiCiAgICAgICB4Mj0iLTQxMS43MDAwNyIKICAgICAgIHkyPSItMzA2LjUyMjM3IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM3NzAiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzY4IgogICAgICAgeDE9Ii01MDYuMjc3MzEiCiAgICAgICB5MT0iLTU1OS42NzUxMSIKICAgICAgIHgyPSItMzg1LjU1MjI1IgogICAgICAgeTI9Ii00NjEuODAwNzUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzc3MC03IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc2OC0xIgogICAgICAgeDE9Ii01MDYuMjc3MzEiCiAgICAgICB5MT0iLTU1OS42NzUxMSIKICAgICAgIHgyPSItMzg1LjU1MjI1IgogICAgICAgeTI9Ii00NjEuODAwNzUiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc3MC03IgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIj4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNzcyLTQiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzA2OTg5YTtzdG9wLW9wYWNpdHk6MSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzNzc0LTAiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzM0ZTBlMjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoNC4xMDE0ODI5LDQuMTU3NDI4LC00LjEwMTQ4MjksNC4xNTc0MjgsMTU3LjkyMjQ3LDMzOC4xMDEwOCkiCiAgICAgICB5Mj0iMjguMzk5MTg1IgogICAgICAgeDI9IjI1LjQ0NTIyMyIKICAgICAgIHkxPSI0MC4yMjc1MDkiCiAgICAgICB4MT0iNDMuMjg4ODkxIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ0MDc1IgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50MzAyMCIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50MzAyMCIKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzAyMiIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojYzRhMDAwO3N0b3Atb3BhY2l0eToxIiAvPgogICAgICA8c3RvcAogICAgICAgICBpZD0ic3RvcDMwMjQiCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZjZTk0ZjtzdG9wLW9wYWNpdHk6MSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI2Ljg1MDA5NjkiCiAgICAgaW5rc2NhcGU6Y3g9IjcuMTA5ODQxMSIKICAgICBpbmtzY2FwZTpjeT0iMzIiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iZzQyODkiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE1MzYiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODAxIgogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMSIKICAgICBpbmtzY2FwZTpzbmFwLWdsb2JhbD0iZmFsc2UiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIHR5cGU9Inh5Z3JpZCIKICAgICAgIGlkPSJncmlkMjk5MCIKICAgICAgIGVtcHNwYWNpbmc9IjIiCiAgICAgICB2aXNpYmxlPSJ0cnVlIgogICAgICAgZW5hYmxlZD0idHJ1ZSIKICAgICAgIHNuYXB2aXNpYmxlZ3JpZGxpbmVzb25seT0idHJ1ZSIgLz4KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4KICA8ZwogICAgIGlkPSJsYXllcjEiCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciI+CiAgICA8ZwogICAgICAgaWQ9Imc0Mjg5IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC4xNjIxMjgyLDAsMCwwLjE2MjEyODIsNi4zNjA1OTg2LC02Ni4xMDg4MDYpIj4KICAgICAgPGcKICAgICAgICAgaWQ9Imc4NzIiCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuODk0Mzc5NDYsMC4xNTU2NTQ4OCwtMC4xNTc3MDMyMywwLjg4Mjc2MjY4LDc3LjkxMDA0MSw4My4wNzcyNTgpIgogICAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTEuMjAwMDY5IgogICAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTEuMjAwMDY5Ij4KICAgICAgICA8cmVjdAogICAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjg0MTMyNzYxLC0wLjU0MDUyNTUzLDAuNTMzNTk5MDYsLTAuODQ1NzM3NTgsMCwwKSIKICAgICAgICAgICB5PSItNTIxLjg5ODYyIgogICAgICAgICAgIHg9Ii01OTkuNjE3NjgiCiAgICAgICAgICAgaGVpZ2h0PSI2Mi4wODA4NzUiCiAgICAgICAgICAgd2lkdGg9IjI4NS43MzI2NCIKICAgICAgICAgICBpZD0icmVjdDM5NDItNC05LTkiCiAgICAgICAgICAgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7ZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50Mzc2OCk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOiMwNDJhMmE7c3Ryb2tlLXdpZHRoOjEyLjMzNjEyNDQyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTttYXJrZXI6bm9uZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjYyIKICAgICAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCg2LjE2Nzk1ODQsMCwwLDYuMTY3OTU4NCwtMzkuMjMxOTA4LDQwNy43NTYzNykiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBpZD0icGF0aDM4MTAiCiAgICAgICAgICAgZD0iTSAxMC4wMTYwNzEsMjcuMTkyODQ3IDQ1LjYzNjM2NCw1MC4xMDIyNzMgNDIuNDA5MDkxLDU1LjI1IDYuNzcxMzg5MiwzMi4zNTcxNzYgWiIKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMzRlMGUyO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICAgIDwvZz4KICAgICAgPGcKICAgICAgICAgaWQ9Imc4NzYiCiAgICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuODgzMjc3NzksMC4xNTc0NDMzMywtMC4xNTU3NDU3MSwwLjg5MjkwNTUxLDE0Ny44ODYxNiw2LjE4MzQ1MykiCiAgICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1MS4yMDAwNjkiCiAgICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1MS4yMDAwNjkiPgogICAgICAgIDxyZWN0CiAgICAgICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLTAuODQxMzI3NjIsLTAuNTQwNTI1NTEsMC41MzM1OTkwNCwtMC44NDU3Mzc1OSwwLDApIgogICAgICAgICAgIHk9Ii0zODMuMjkwNSIKICAgICAgICAgICB4PSItNTk5LjY4MjI1IgogICAgICAgICAgIGhlaWdodD0iNjAuMDEzOTAxIgogICAgICAgICAgIHdpZHRoPSIyODUuMDQ4NTUiCiAgICAgICAgICAgaWQ9InJlY3QzOTQyLTQtOSIKICAgICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQzNzY2KTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6IzA0MmEyYTtzdHJva2Utd2lkdGg6MTIuMzM2MTI0NDI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgaWQ9InBhdGgzODEwLTQiCiAgICAgICAgICAgZD0iTSA5Ni4zNjgxNzEsNDU4LjEwNzQ3IDMxNi4wNzI2Niw1OTkuNDExODUgMjk2LjE2Njk4LDYzMS4xNjI4MiA3Ni4zNTUxMTEsNDg5Ljk2MDgzIFoiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzM0ZTBlMjtzdHJva2Utd2lkdGg6MTIuMzM1OTE2NTI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgICAgPC9nPgogICAgICA8ZwogICAgICAgICBpZD0iZzg2OCIKICAgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUxLjIwMDA2OSIKICAgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjUxLjIwMDA2OSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTEuMjAwMDY5IgogICAgICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1MS4yMDAwNjkiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjY2NjY2MiCiAgICAgICAgICAgaWQ9InBhdGgzNzcwLTEiCiAgICAgICAgICAgZD0ibSAxNzQuMzI4NDEsNTI5LjM0Mjc2IDE2LjQwNTk0LDE2LjYyOTcxIC05MC4yMzI2Myw5MS40NjM0MyAtMTYuNDA1OTM1LC0xNi42Mjk3MyBjIDAsMjQuOTQ0NTggLTQuMTAxNDc2LDQ1LjczMTcyIC04LjIwMjk2NSw1OC4yMDQwMSBsIC00LjEwMTQ3NiwxMi40NzIyNyAxMi4zMDQ0NDEsLTQuMTU3NDIgYyAxMi4zMDQ0NDgsLTQuMTU3NDMgMzIuODExODY1LC04LjMxNDg1IDU3LjQyMDc2NSwtOC4zMTQ4NSBsIC0xNi40MDU5MywtMTYuNjI5NzIgOTAuMjMyNjEsLTkxLjQ2MzQyIDE2LjQwNTk0LDE2LjYyOTcyIGMgMCwtMjQuOTQ0NTggNC4xMDE0OCwtNDUuNzMxNzEgOC4yMDI5NywtNTguMjA0IGwgNC4xMDE0NywtMTIuNDcyMjggLTEyLjMwNDQ0LDQuMTU3NDIgYyAtMTIuMzA0NDUsNC4xNTc0MyAtMzIuODExODYsOC4zMTQ4NiAtNTcuNDIwNzYsOC4zMTQ4NiB6IgogICAgICAgICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTtsZXR0ZXItc3BhY2luZzpub3JtYWw7d29yZC1zcGFjaW5nOm5vcm1hbDt0ZXh0LXRyYW5zZm9ybTpub25lO3dyaXRpbmctbW9kZTpsci10YjtkaXJlY3Rpb246bHRyO2Jhc2VsaW5lLXNoaWZ0OmJhc2VsaW5lO3RleHQtYW5jaG9yOnN0YXJ0O2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7dmlzaWJpbGl0eTp2aXNpYmxlO2ZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDQwNzUpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxMi4zMzU5MTY1MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7ZW5hYmxlLWJhY2tncm91bmQ6YWNjdW11bGF0ZSIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjUxLjIwMDA2OSIKICAgICAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTEuMjAwMDY5IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBpZD0icGF0aDM4NjQiCiAgICAgICAgICAgZD0ibSAyMjMuNTQ2Miw1MjkuMzQyNzYgLTQxLjAxNDgyLDguMzE0ODYiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2ZjZTk0ZjtzdHJva2Utd2lkdGg6MTIuMzM1OTE2NTI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1MS4yMDAwNjkiCiAgICAgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUxLjIwMDA2OSIKICAgICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgaWQ9InBhdGgzODY0LTQiCiAgICAgICAgICAgZD0ibSA4NC4wOTU3ODUsNjcwLjY5NTMxIDguMjAyOTY2LC00MS41NzQyNyIKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmNlOTRmO3N0cm9rZS13aWR0aDoxMi4zMzU5MTY1MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjUxLjIwMDA2OSIKICAgICAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTEuMjAwMDY5IgogICAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBpZD0icGF0aDM4NjYiCiAgICAgICAgICAgZD0iTSAyMzEuNzQ5MTcsNTIxLjAyNzkgNzEuOTEyODI4LDY4Mi43MjQ4MyIKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmNlOTRmO3N0cm9rZS13aWR0aDoxMi4zMzU5MTY1MjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgICAgICA8cGF0aAogICAgICAgICAgIGlua3NjYXBlOmV4cG9ydC15ZHBpPSI1MS4yMDAwNjkiCiAgICAgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXhkcGk9IjUxLjIwMDA2OSIKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgIGlkPSJwYXRoMzg2OCIKICAgICAgICAgICBkPSJtIDE5MC43MzQzNSw1NDUuOTcyNDcgMjAuNTA3NCwtNC4xNTc0MiIKICAgICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmNlOTRmO3N0cm9rZS13aWR0aDoxMi4zMzU5MTY1MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6ZXhwb3J0LXlkcGk9IjUxLjIwMDA2OSIKICAgICAgICAgICBpbmtzY2FwZTpleHBvcnQteGRwaT0iNTEuMjAwMDY5IgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgaWQ9InBhdGgzODY4LTgiCiAgICAgICAgICAgZD0ibSAxMDAuNTAxNzIsNjM3LjQzNTkgLTQuMTAxNDg3LDIwLjc4NzEzIgogICAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmY2U5NGY7c3Ryb2tlLXdpZHRoOjEyLjMzNTkxNjUyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICBpbmtzY2FwZTpleHBvcnQteWRwaT0iNTEuMjAwMDY5IgogICAgICAgICAgIGlua3NjYXBlOmV4cG9ydC14ZHBpPSI1MS4yMDAwNjkiCiAgICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2NjY2NjY2MiCiAgICAgICAgICAgaWQ9InBhdGgzNzcwLTkiCiAgICAgICAgICAgZD0ibSAxNzUuNzY1NTEsNTI1LjgyODcgMTcuNjIyNzQsMTcuNjIyNzUgLTk2LjkyNTA3OSw5Ni45MjUwNyAtMTcuNjIyNzMzLC0xNy42MjI3NSBjIDAsMjYuNDM0MTIgLTQuNDA1NjgsNDguNDYyNTQgLTguODExMzczLDYxLjY3OTYgbCAtNC40MDU2OCwxMy4yMTcwNCAxMy4yMTcwNTMsLTQuNDA1NjcgYyAxMy4yMTcwNTMsLTQuNDA1NjkgMzUuMjQ1NDcyLC04LjgxMTM3IDYxLjY3OTU5MiwtOC44MTEzNyBsIC0xNy42MjI3NCwtMTcuNjIyNzUgOTYuOTI1MDYsLTk2LjkyNTA2IDE3LjYyMjc1LDE3LjYyMjc0IGMgMCwtMjYuNDM0MTIgNC40MDU2OCwtNDguNDYyNTQgOC44MTEzNiwtNjEuNjc5NiBsIDQuNDA1NjgsLTEzLjIxNzA0IC0xMy4yMTcwNCw0LjQwNTY3IGMgLTEzLjIxNzA2LDQuNDA1NjkgLTM1LjI0NTQ4LDguODExMzcgLTYxLjY3OTU5LDguODExMzcgeiIKICAgICAgICAgICBzdHlsZT0iY29sb3I6IzAwMDAwMDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0cmV0Y2g6bm9ybWFsO2ZvbnQtc2l6ZTptZWRpdW07bGluZS1oZWlnaHQ6bm9ybWFsO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7dGV4dC1pbmRlbnQ6MDt0ZXh0LWFsaWduOnN0YXJ0O3RleHQtZGVjb3JhdGlvbjpub25lO3RleHQtZGVjb3JhdGlvbi1saW5lOm5vbmU7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTt3cml0aW5nLW1vZGU6bHItdGI7ZGlyZWN0aW9uOmx0cjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtmaWxsOm5vbmU7c3Ryb2tlOiMzMDJiMDA7c3Ryb2tlLXdpZHRoOjEyLjMzNTkxNjUyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgICAgIDwvZz4KICAgIDwvZz4KICA8L2c+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNjU5MSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGUgLz4KICAgICAgICA8Y2M6bGljZW5zZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iIiAvPgogICAgICAgIDxkYzpkYXRlPk1vbiBNYXIgMTIgMTc6MjA6MDMgMjAxMiAtMDMwMDwvZGM6ZGF0ZT4KICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgIDxjYzpBZ2VudD4KICAgICAgICAgICAgPGRjOnRpdGxlPltZb3JpayB2YW4gSGF2cmVdPC9kYzp0aXRsZT4KICAgICAgICAgIDwvY2M6QWdlbnQ+CiAgICAgICAgPC9kYzpjcmVhdG9yPgogICAgICAgIDxkYzpyaWdodHM+CiAgICAgICAgICA8Y2M6QWdlbnQ+CiAgICAgICAgICAgIDxkYzp0aXRsZT5GcmVlQ0FEIExHUEwyKzwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6cmlnaHRzPgogICAgICAgIDxkYzpwdWJsaXNoZXI+CiAgICAgICAgICA8Y2M6QWdlbnQ+CiAgICAgICAgICAgIDxkYzp0aXRsZT5GcmVlQ0FEPC9kYzp0aXRsZT4KICAgICAgICAgIDwvY2M6QWdlbnQ+CiAgICAgICAgPC9kYzpwdWJsaXNoZXI+CiAgICAgICAgPGRjOmlkZW50aWZpZXI+RnJlZUNBRC9zcmMvTW9kL0RyYWZ0L1Jlc291cmNlcy9pY29ucy9TbmFwX1BhcmFsbGVsLnN2ZzwvZGM6aWRlbnRpZmllcj4KICAgICAgICA8ZGM6cmVsYXRpb24+aHR0cDovL3d3dy5mcmVlY2Fkd2ViLm9yZy93aWtpL2luZGV4LnBocD90aXRsZT1BcnR3b3JrPC9kYzpyZWxhdGlvbj4KICAgICAgICA8ZGM6Y29udHJpYnV0b3I+CiAgICAgICAgICA8Y2M6QWdlbnQ+CiAgICAgICAgICAgIDxkYzp0aXRsZT5bYWdyeXNvbl0gQWxleGFuZGVyIEdyeXNvbjwvZGM6dGl0bGU+CiAgICAgICAgICA8L2NjOkFnZW50PgogICAgICAgIDwvZGM6Y29udHJpYnV0b3I+CiAgICAgICAgPGRjOmRlc2NyaXB0aW9uPlR3byBwYXJhbGxlbCBsaW5lcyBhdCBhIHNsaWdodCBhbmdsZTwvZGM6ZGVzY3JpcHRpb24+CiAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICA8cmRmOkJhZz4KICAgICAgICAgICAgPHJkZjpsaT5saW5lPC9yZGY6bGk+CiAgICAgICAgICAgIDxyZGY6bGk+bGluZXM8L3JkZjpsaT4KICAgICAgICAgICAgPHJkZjpsaT5wYXJhbGxlbDwvcmRmOmxpPgogICAgICAgICAgPC9yZGY6QmFnPgogICAgICAgIDwvZGM6c3ViamVjdD4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+Cjwvc3ZnPgo=
"""
SnapCenter_b64=\
"""
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
"""
SnapVertex_b64=\
"""
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
"""
SnapEdge_b64=\
"""
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
"""
SnapFace_b64=\
"""
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
"""
SelectAll_b64=\
"""
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjY0cHgiCiAgIGhlaWdodD0iNjRweCIKICAgaWQ9InN2ZzI5ODAiCiAgIHNvZGlwb2RpOnZlcnNpb249IjAuMzIiCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMyAoMjQwNTU0NiwgMjAxOC0wMy0xMSkiCiAgIHNvZGlwb2RpOmRvY25hbWU9IkFzbTRfZW5hYmxlTGlua1NlbGVjdGlvbi5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIgogICB2ZXJzaW9uPSIxLjEiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnMyOTgyIj4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzg2NCI+CiAgICAgIDxzdG9wCiAgICAgICAgIGlkPSJzdG9wMzg2NiIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNzFiMmY4O3N0b3Atb3BhY2l0eToxOyIgLz4KICAgICAgPHN0b3AKICAgICAgICAgaWQ9InN0b3AzODY4IgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIHN0eWxlPSJzdG9wLWNvbG9yOiMwMDI3OTU7c3RvcC1vcGFjaXR5OjE7IiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAzMiA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI2NCA6IDMyIDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzMiA6IDIxLjMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyOTg4IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUyODcyIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI5MDIiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjkwMi05IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudDM3NzQiPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojNGU5YTA2O3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgIGlkPSJzdG9wMzc3NiIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6IzhhZTIzNDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDM3NzgiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICB4bGluazpocmVmPSIjbGluZWFyR3JhZGllbnQzNzY1IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc3MSIKICAgICAgIHgxPSIzNSIKICAgICAgIHkxPSI1MSIKICAgICAgIHgyPSIzMSIKICAgICAgIHkyPSIxOCIKICAgICAgIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiAvPgogICAgPGxpbmVhckdyYWRpZW50CiAgICAgICBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQzNzY1Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2QzZDdjZjtzdG9wLW9wYWNpdHk6MTsiCiAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgaWQ9InN0b3AzNzY3IiAvPgogICAgICA8c3RvcAogICAgICAgICBzdHlsZT0ic3RvcC1jb2xvcjojZmZmZmZmO3N0b3Atb3BhY2l0eToxIgogICAgICAgICBvZmZzZXQ9IjEiCiAgICAgICAgIGlkPSJzdG9wMzc2OSIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTYsMzApIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzc3Ny05IgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc4My0yIgogICAgICAgeDE9IjUzLjg5Njc2MyIKICAgICAgIHkxPSI1MS4xNzk3ODciCiAgICAgICB4Mj0iNTAiCiAgICAgICB5Mj0iMzgiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc3Ny05Ij4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2M0YTAwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDM3NzktMSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VkZDQwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDM3ODEtMiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTYsMzApIgogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgeGxpbms6aHJlZj0iI2xpbmVhckdyYWRpZW50Mzc2Ny0zIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc3My01IgogICAgICAgeDE9IjIyLjExNjUxNiIKICAgICAgIHkxPSI1NS43MTc1MTgiCiAgICAgICB4Mj0iMjAiCiAgICAgICB5Mj0iNDAiCiAgICAgICBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgLz4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIgogICAgICAgaWQ9ImxpbmVhckdyYWRpZW50Mzc2Ny0zIj4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2VkZDQwMDtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICBpZD0ic3RvcDM3NjktNSIgLz4KICAgICAgPHN0b3AKICAgICAgICAgc3R5bGU9InN0b3AtY29sb3I6I2ZjZTk0ZjtzdG9wLW9wYWNpdHk6MSIKICAgICAgICAgb2Zmc2V0PSIxIgogICAgICAgICBpZD0ic3RvcDM3NzEtNiIgLz4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQKICAgICAgIGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIKICAgICAgIHhsaW5rOmhyZWY9IiNsaW5lYXJHcmFkaWVudDM3NzQiCiAgICAgICBpZD0ibGluZWFyR3JhZGllbnQ5NDUiCiAgICAgICB4MT0iMi43Nzk1MjYyIgogICAgICAgeTE9IjQ4LjQ0NDEyNiIKICAgICAgIHgyPSIyMi43Nzk1MjgiCiAgICAgICB5Mj0iNDguNDQ0MTI2IgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0xLDAsMCwxLDI1LjU1OTA1MywwKSIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjUiCiAgICAgaW5rc2NhcGU6Y3g9IjcuODc5MjA3MyIKICAgICBpbmtzY2FwZTpjeT0iMTUuNDM1MDI1IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIKICAgICBzaG93Z3JpZD0idHJ1ZSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4MjkiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMyNyIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMTcyIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIHR5cGU9Inh5Z3JpZCIKICAgICAgIGlkPSJncmlkMjk5MSIKICAgICAgIGVtcHNwYWNpbmc9IjIiCiAgICAgICB2aXNpYmxlPSJ0cnVlIgogICAgICAgZW5hYmxlZD0idHJ1ZSIKICAgICAgIHNuYXB2aXNpYmxlZ3JpZGxpbmVzb25seT0idHJ1ZSIgLz4KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGEyOTg1Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZSAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZwogICAgIGlkPSJsYXllcjEiCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciI+CiAgICA8ZwogICAgICAgaWQ9Imc0NTg1IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4yODc1MDUsMCwwLDEuMzExNzI0NiwtODEuMzc4ODQzLC03Ny42Mjg3MzIpIj4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImZpbGw6I2ZjZTk0ZjtzdHJva2U6IzMwMmIwMDtzdHJva2Utd2lkdGg6MS41Mzg5ODQzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICAgIGQ9Im0gNzUsNjUgMTgsNCAxNiwtNCAtMTYsLTQgeiIKICAgICAgICAgaWQ9InBhdGgyOTkzLTciCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQzNzgzLTIpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMzAyYjAwO3N0cm9rZS13aWR0aDoxLjUzODk4NDM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAxMDksNjUgViA4NSBMIDkzLDkxIFYgNjkgWiIKICAgICAgICAgaWQ9InBhdGgyOTk1LTAiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiCiAgICAgICAgIGlkPSJwYXRoMzgyNS05IgogICAgICAgICBkPSJtIDc1LDY1IDE4LDQgViA5MSBMIDc1LDg3IFoiCiAgICAgICAgIHN0eWxlPSJkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO3Zpc2liaWxpdHk6dmlzaWJsZTtmaWxsOnVybCgjbGluZWFyR3JhZGllbnQzNzczLTUpO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMzAyYjAwO3N0cm9rZS13aWR0aDoxLjUzODk4NDM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MDtzdHJva2Utb3BhY2l0eToxO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNmY2U5NGY7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSA3Nyw2Ny40Mjc3MiAwLjAwODcsMTcuOTE5MTE2IDE0LjAwODY3MSwzLjI2ODc5OSAtMC4wMDg3LC0xNy45MzM2MTQgeiIKICAgICAgICAgaWQ9InBhdGgzNzY1LTMiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2MiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNlZGQ0MDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0ibSA5NS4wMTI0Myw3MC40MzM4MzMgLTAuMDEyMjYsMTcuNTM1MzAxIDEyLjAwMTEsLTQuMzAwOTkzIDMuNmUtNCwtMTUuODY3MzYzIHoiCiAgICAgICAgIGlkPSJwYXRoMzc3NS02IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjIiAvPgogICAgPC9nPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOiM3MjlmY2Y7c3Ryb2tlOiMwYjE1MjE7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQuNTtzdHJva2UtZGFzaG9mZnNldDoyMC4zOTk5OTk2MjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSAyMy43Nzk1MjgsNTUuNjI1ODM4IGMgMCwyLjI4NTMyIC00LjkyNDg2Nyw0LjEzNzk0IC0xMSw0LjEzNzk0IC02LjA3NTEzMjgsMCAtMTEuMDAwMDAwOCwtMS44NTI2MiAtMTEuMDAwMDAwOCwtNC4xMzc5NCBsIC0xMGUtNywtMTcuNzI0MTMxIEggMjMuNzc5NTI3IFoiCiAgICAgICBpZD0icGF0aDI5OTQtMy0zLTYiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJzc2NjY3MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDk0NSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM4YWUyMzQ7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQuNTtzdHJva2UtZGFzaG9mZnNldDoyMC4zOTk5OTk2MjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0ibSAzLjc3OTUyNjIsNTQuNzYzNzc4IGMgMCwyLjA3NzU2IDUuOTk5ODAyLDMuMDE1ODcgOC45OTk5OTk4LDMuMDE1ODcgMywwIDksLTAuOTM4MzEgOSwtMy4wMTU4NyBsIDFlLTYsLTE1LjY1NTE3MiBIIDMuNzc5NTI2MiBaIgogICAgICAgaWQ9InBhdGgyOTk0LTMtNi01LTEiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJzc2NjY3MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzhhZTIzNDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NC41O3N0cm9rZS1kYXNob2Zmc2V0OjIwLjM5OTk5OTYyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDIxLjc3OTUyNyw0MS43NjM3NzkgYyAtMiwxLjk5OTk5OSAtNiwyLjM1MTY0NyAtOSwyLjM1MTY0NyAtMi45OTk5OTk4LDAgLTYuOTk5OTk5OCwtMC4zNTE2NDggLTguOTk5OTk5OCwtMi4zNTE2NDciCiAgICAgICBpZD0icGF0aDI5OTQtMy02LTktNi04IgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3NjIiAvPgogICAgPGVsbGlwc2UKICAgICAgIHN0eWxlPSJmaWxsOiM4YWUyMzQ7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwYjE1MjE7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQuNTtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLWRhc2hvZmZzZXQ6MjAuMzk5OTk5NjI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGlkPSJwYXRoMjk5NC0yLTciCiAgICAgICBjeD0iMTIuNzc5NTI4IgogICAgICAgY3k9IjM3LjkwMTcxMSIKICAgICAgIHJ4PSIxMS4wMDAwMDEiCiAgICAgICByeT0iNC4xMzc5MzA5IiAvPgogICAgPGcKICAgICAgIGlkPSJnMjk5NiIKICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KC0wLjgxLDAsMCwwLjgxLDY5LjAwMzg1OCwxNi4wNTMzMDcpIj4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjYyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgzNzYxIgogICAgICAgICBkPSJNIDcsNDkgMTUsNTcgMzUsMzcgNDEsNDkgNTcsNyAxNSwyMyAyNywyOSBaIgogICAgICAgICBzdHlsZT0iZmlsbDp1cmwoI2xpbmVhckdyYWRpZW50Mzc3MSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMyZTM0MzY7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjYyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgaWQ9InBhdGgzNzYzIgogICAgICAgICBkPSJNIDkuODE4MTgxOCw0OSAzMC4zNjM2MzYsMjguMzYzNjM2IDIwLDIzLjI3MjcyNyA1My41NDU0NTUsMTAuNDU0NTQ1IDQwLjcyNzI3Myw0NCAzNS42MzYzNjQsMzMuNjM2MzY0IDE1LDU0LjE4MTgxOCBaIgogICAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K
"""


"""
    +-----------------------------------------------+
    |       add the command to the workbench        |
    +-----------------------------------------------+
"""
Gui.addCommand( 'Asm4_Measure', MeasureCmd() )

